@Cacheable是spring自带的缓存注解,它支持redis的缓存,接下来就让我们看看它的使用方法吧。
第一步:启动类上开启缓存支持
在启动类上写上这个注解,不然缓存是不会得到支持的。
@EnableCaching
第二步:在对应的方法上注解,并填上属性
value是必须填写的,是方法执行的时候找到缓存的关键,key是缓存的键值可以为空。
// 缓存注解
@Cacheable(value = "product:seckill",key = "'list'")
@Override
public List<PromotionProductVo> findPromotionSeckill() {}
第三步:配置缓存工具的序列化和注解的序列化
@Configuration
public class RedisConfig {
/**
* 配置RedisTemplate的序列化方式
*/
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
// 指定key的序列化方式:string
redisTemplate.setKeySerializer(RedisSerializer.string());
// 指定value的序列化方式:json
redisTemplate.setValueSerializer(RedisSerializer.json());
return redisTemplate;
}
/**
* 配置Redis缓存注解的value序列化方式
*/
@Bean
public RedisCacheConfiguration redisCacheConfiguration(){
RedisCacheConfiguration configuration =
RedisCacheConfiguration.defaultCacheConfig();
configuration = configuration.serializeValuesWith(
RedisSerializationContext.SerializationPair.fromSerializer(
RedisSerializer.json()
)
);
return configuration;
}
}
如果你想删除缓存可以使用@CacheEvict注解,使用示例:
其中cacheNames是@Cacheable的value值,allEntries是决定是否删除全部,true代表删除全部。
@CacheEvict(cacheNames = "product:seckill",allEntries = true)
@Override
public void updateTest() {
}
注意事项:
1、@Cacheable必须开启缓存在启动类上@EnableCaching
2、返回的对象要实现缓存该对象是必须实现序列化接口的Serializable
3、@Cacheable不可用在私有方法上面,可以放在接口和具体的方法上面
4、@Cacheable这个注解是放在具体的方法上;
5、@CacheConfig这个注解只能放在类上代表这个类所有缓存的公共属性配置,比如value等非必须;
6、key = "#对象.属性"或者直接使用key = "#属性";直接读取的是方法形参内的参数属性或者对象;
7、key = "#对象.属性.concat('Hydrologydata')"
更多使用方法可以参考一下文章: