springboot整合redis实现缓存
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>spring:
redis:
##默认redis客户端连接为0 可修改
database: 0
host: 127.0.0.1
port: 6379
cache_name: XiChuanRedis
##password:
pool:
##连接池最大空闲连接
max-idle: 8
min-idle: 0
max-active: 8
max-wait: 1
timeout: 5000@Configuration
@EnableCaching//启用缓存
public class RedisConfig extends CachingConfigurerSupport{
@Value("${spring.redis.cache_name}")
private String cacheName;
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
// 多个缓存的名称,目前只定义了一个
rcm.setCacheNames(Arrays.asList(cacheName));
//设置缓存过期时间(秒)
rcm.setDefaultExpiration(6000);
return rcm;
}
@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);
template.afterPropertiesSet();
return template;
}
}@Component
public classBaseServiceImpl{
@Autowired
ParamRepository paramRepository;
@Cacheable(value="XiChuanRedis", key="‘sign_test‘")
public String getNotFinishedTypeCode(){
List<Param> params = paramRepository.findBySpiderOver(0);
if(params != null && params.size() > 0){
return params.stream() //先将List按照id进行排序,然后取出最上面的那个,然后取出第一个
.sorted(Comparator.comparing(HeiGuangParam::getId))
.collect(Collectors.toList())
.get(0)
.getTypeCode();
}else{ //如果没有就返回null
return null;
}
}
/**
* 更新param后,需要将redis中的值移除
* @param param
*/
@CacheEvict(value="XiChuanRedis", key="‘sign_test‘")
public void updateParamByTypeCode(Param param){
paramRepository.save(param);
}
}@Cacheable:如果redis在相同的Cache有相同的key的缓存元素时,就会直接在redis缓存中,根据key读取缓存并返回结果;如果没有,则先调用方法,将返回值写入到redis缓存中,然后返回结果。它的属性有:value、key、condition
value:指定是哪一个Cache,可以指定多个Cache。例如:@Cacheable({"cache1", "cache2"})
key:缓存的key,当在清楚缓存时要与此对应。
1.key为null,则使用默认key。
2.key为一个字符串,例如:@CacheEvict(value="XiChuanRedis", key="‘department_code_‘")。
3.key为方法中的一个方法上的一个属性,例如:
@CacheEvict(value="XiChuanRedis", key="‘code_‘+#departmentCode")
public String getNameByCode(String departmentCode){
}4.key为方法中的一个方法上的一个实体的属性,例如:
@Cacheable(value="XiChuanRedis", key="‘userid_‘+#user.id")
public User getUserById(Integer id){
}condition:缓存条件,可以直接为null,例子如下:
@Cacheable(value="XiChuanRedis", key="‘userid_‘+#user.id", condition="#user.id%2==0")
public User getUserById(Integer id){
}