Spring Data Redis为我们封装了Redis客户端的各种操作,简化使用。
- 当Redis当做数据库或者消息队列来操作时,我们一般使用RedisTemplate来操作
- 当Redis作为缓存使用时,我们可以将它作为Spring Cache的实现,直接通过注解使用
关于RedisTemplate的使用可参考:http://blog.didispace.com/springbootredis/
下面总结使用Redis作为缓存
引入依赖
SpringBoot从1.4版本开始,spring-boot-starter-redis
依赖改名了。
配置文件
|
|
这样,SpringBoot将会自动配置redis,注入相关bean,我们就可以使用@CacheConfig
,@Cacheable
,@CachePut
,@CacheEvict
了。
使用Cache注解时的问题
缓存对象集合中,缓存是以key-value形式保存的。当不指定缓存的key时,SpringBoot会使用SimpleKeyGenerator
生成key。
|
|
查看源码可以发现,它是使用方法参数组合生成的一个key。
此时有一个问题:
如果2个方法,参数是一样的,但执行逻辑不同,那么将会导致执行第二个方法时命中第一个方法的缓存。
解决办法是在@Cacheable
注解参数中指定key,或者自己实现一个KeyGenerator
,在注解中指定KeyGenerator。
但是如果这样的情况很多,每一个都要指定key、KeyGenerator很麻烦。
Spring同样提供了方案:继承CachingConfigurerSupport
并重写keyGenerator()
下面贴出代码:
此时,缓存的key是包名+方法名+参数列表,这样就很难会冲突了。