标题 ##Spring boot整合Redis
1、配置步骤
1)配置Redis相关属性
在对应环境配置文件如开发环境(application-dev.properties)添加属性配置:
#REDIS-S
# Redis数据库索引
spring.redis.database=0
# Redis服务器地址
spring.redis.host=x.x.x.x.x
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码
spring.redis.password=xxxxxxx
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0
#REDIS-E
#xxxx配置-S
!redis缓存开关
xxxx.redis.open=true
#xxxx配置-E
注意:xxxx.redis.open=true此配置为缓存开关,配合缓存注解类RedisConfig.class中的注解@ConditionalOnProperty(name = “xxxx.redis.open”, havingValue = “true”)
使用,可以动态控制缓存的全局使用
2)spring boot开启缓存注解
添加RedisConfig.java类,作用:
1.配置key的生成策略
2.RedisTemplate配置
3.value序列化配置
例子代码:
@Configuration
@EnableCaching //启用缓存
@ConditionalOnProperty(name = "xxxx.redis.open", havingValue = "true")
public class RedisConfig extends CachingConfigurerSupport {
/**
* 【作用】生成key的策略<br>
* 【说明】
* @param
* @author Kalvin
* @Date 2017/12/20 11:56
*/
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
/**
* 【作用】管理缓存<br>
* 【说明】(无)
* @param redisTemplate
* @author Kalvin
* @Date 2017/12/20 11:57
*/
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
//设置缓存过期时间
// rcm.setDefaultExpiration(60);//秒
return rcm;
}
/**
* 【作用】RedisTemplate配置<br>
* 【说明】(无)
* @param factory
* @author Kalvin
* @Date 2017/12/20 11:58
*/
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);//设置value序列化,采用jackson2JsonRedisSerializer
template.afterPropertiesSet();
return template;
}
}
3)配置缓存使用
1.使用注解:(添加在需要缓存的方法函数上)
例如:
@RequestMapping(value = "info", method = RequestMethod.GET)
@Cacheable(value = CACHE_NAME)
public Result info(Long userId) {
User user = userService.fetch(userId);
return Result.ok(user);
}
4)更新缓存
使用注解@CacheEvict(value = CACHE_NAME,allEntries=true);
注意:一般用于数据更新、删除、插入的业务操作方法上使用;注解的相关参数使用,请根据实际情况配置。
例如:
@RequestMapping(value = "dele", method = RequestMethod.GET)
@CacheEvict(value = CACHE_NAME, allEntries = true)
public Result dele(Long... ids) {
userService.updateAsDelete(ids);
return Result.ok();
}