使用@Cacheable注解完成redis缓存

@Cacheable是spring自带的缓存注解,它支持redis的缓存,接下来就让我们看看它的使用方法吧。

第一步:启动类上开启缓存支持
在启动类上写上这个注解,不然缓存是不会得到支持的。

@EnableCaching


第二步:在对应的方法上注解,并填上属性
value是必须填写的,是方法执行的时候找到缓存的关键,key是缓存的键值可以为空。
// 缓存注解 @Cacheable(value = "https://www.it610.com/article/product:seckill",key = "'list'") @Override public List 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')"

更多使用方法可以参考一下文章:
Spring 缓存——@Cacheable - 简书
spring对缓存的使用@Cacheable - 逝年的我们 - 博客园
【使用@Cacheable注解完成redis缓存】

    推荐阅读