springboot中使用了@Cacheable并且以redis作为缓存。之后在redis里也找到了这个key,但问题是获取value时为空。查看了注解在没有设置value的情况下value默认为{},即empty list or set。但为什么即便是empty list or set还是可以通过缓存的方式获取到缓存呢?Debug模式下,当这个缓存的key还存在时,调用方法时并没有额外的日志也说明了走了缓存,疑惑的点就在于redis中缓存又为空,不清楚到底如何获取到的。
@Cacheable 里面的value属性和cacheName属性就是同一个意思,就是Redis里面的Key,这里的value不是你Redis里面的value
而这里缓存存的值是你查询后的结果,也就是你的R会存到Redis中。
可能有两个原因:
1.连接的redis或者redis的db配置不对,配置到另一个redis或者db
2.spring boot 生成的key格式可能是::连接的,和你理解的key格式不一样,可能他读取的key是Books.allUsers::allBooks,而redis有的key是Books.allUsers.allBooks