Springboot配置支持Redis实例

 

思路:既然使用redis就要添加redis依赖,redis是<key.value>的存储方式,支持字符串存储。有了jar包,就要把我们的数据存进去,读出来。redis不支持存储对象,比如User,所以需要把我们的对象User转换为字符串,再存进去。读取的时候再把json字符串转换为对象User.删除直接使用key就删除了。

1.添加依赖pom.xm;

<!–缓存支持 start–>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>

<!– gson用于处理redis和实体的转换 –>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>

2.Springboot配置redis,包括配置文件和javaBean配置(都要配置)

1.修改springboot的application.properties 加上下面配置(修改为自己的)

#Redis缓存配置
#Redis数据库名称
spring.redis.database=0
# 主机
spring.redis.host=127.0.0.1
#密码 默认为空
#spring.redis.password=
#端口
spring.redis.port=6379
# 最大空闲链接
spring.redis.pool.max-idle=8
# 最小空闲链接
spring.redis.pool.min-idle=0
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
#连接池最小连接数(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接超时时间(毫秒)
spring.redis.timeout=0

2.javaBean 配置

@Configuration
public class RedisCacheConfig {

/**
*
缓存管理器.
* @param
redisTemplate
* @return
*/
@Bean
public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
CacheManager cacheManager = new RedisCacheManager(redisTemplate);
return cacheManager;
}@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(factory);
//key序列化方式;(不然会出现乱码;),但是如果方法上有Long等非String类型的话,会报类型转换错误;
//所以在没有自己定义key生成策略的时候,以下这个代码建议不要这么写,可以不配置或者自己实现ObjectRedisSerializer
//或者JdkSerializationRedisSerializer序列化方式;
RedisSerializer<String> redisSerializer = new StringRedisSerializer();//Long类型不可以会出现异常信息;
redisTemplate.setKeySerializer(redisSerializer);
redisTemplate.setHashKeySerializer(redisSerializer);
return redisTemplate;
}

配置到这里就结束了,这时候可以测试存,读,删了。(记得打开redis)

3.利用RedisTemplate封装一个基本的工具类UserRedis,方便使用

@Repository
public class UserRedis { @Autowired
RedisTemplate<String, String> redisTemplate;

/**
*
加入缓存,设定有效期
* @param
key
* @param time
* @param object
*/
public void add(String key, Long time, Object object) {
Gson gson = new Gson();
redisTemplate.opsForValue().set(key, gson.toJson(object), time, TimeUnit.MINUTES);
System.out.println(“添加到缓存成功—Key:” + key + “—Value:” + object.toString());
}/**
*
从缓存中获取值
* @param key
* @return
*/
public Object get(String key) {
Gson gson = new Gson();
Object object = null;
String objjson = redisTemplate.opsForValue().get(key);
if (!StringUtils.isEmpty(objjson)) {
object = gson.fromJson(objjson, Object.class);
}
System.out.println(“从缓存中获取:—Key:” + key + “—value:” + object.toString());
return object;
}/**
*
从缓存中删除
* @param
key
*/
public void delete(String key) {
redisTemplate.opsForValue().getOperations().delete(key);
System.out.println(“从缓存中删除完毕–key:” + key);
}/**
*
从缓存中获取List
* @param
key
* @return
*/
public List<Object> getList(String key) {
Gson gson = new Gson();
List<Object> ts = null;
String listuser = redisTemplate.opsForValue().get(key);
if (!StringUtils.isEmpty(listuser)) {
ts = gson.fromJson(listuser, new TypeToken<List>() { //存的是list集合,获取的时候需要指定其类型
}.getType());
}
System.out.println(“从缓存中获取list—key:” + key);
return ts;
}

 

4.现在已经封装好了,bean 名称是UserRedis,下面是在一个Controller中测试使用这个bean存,读数据

//添加到缓存
@RequestMapping(value = “/redis/add/{name}”)
@ResponseBody
public String redistestadd(@PathVariable String name) {
User user = userServiceImpl.findByUsername(name);//根据用户名查询到用户
userRedis.add(name, 10L, user);
return JSON.toJSONString(user);//alibaba.fastjson 也可以把对象数组转为json
}//从缓存中读取数据@RequestMapping(value = “/redis/get/{name}”)
@ResponseBody
public String redistestget(@PathVariable String name) {
Object user = userRedis.get(name);//根据用户名查询到用户
System.out.println(“从缓存中拿到的User:” + user.toString());
return JSON.toJSONString(user);//alibaba.fastjson 也可以把对象数组转为json
}//删除数据@RequestMapping(value = “/redis/delete/{name}”)
@ResponseBody
public void redistestdelete(@PathVariable String name) {
System.out.println(“name:” + name);
//根据用户名查询到用户
userRedis.delete(name);
}//从缓存读取List对象@RequestMapping(value = “/redis/listget/{name}”)
@ResponseBody
public String redistestlistget(@PathVariable String name) {
System.out.println(“name:” + name);
List<Object> users = userRedis.getList(name);
return JSON.toJSONString(users);
}

 

本站的文章多是老王开发工作中问题的记录,一个字一个字敲的,切实可行,可以分享,需要留个原文链接,至少也意思意思吧!
vsalw技术博客 » Springboot配置支持Redis实例

你想下载这个主题吗?

沟通一下 扯会蛋