Spring Cache如何简化和优化?
关于spring缓存的问题:


- 类似我通过注解方式定义的缓存,我定义了设置缓存,获取缓存、删除缓存三个方法,但我感觉其中设置、删除缓存方法都很奇怪,设置缓存居然要提供返回值才能实际设置;删除缓存又是一个空的方法体。缓存是通过这种方式使用的吗?我感觉很奇怪
 - 我在 application.yml 中配置了缓存的 cache-names;然后使用 @Cachable 注解IDE还是会提示要提供 name,有办法取消这种警告吗
 - 上面获取缓存的值的方法我感觉有点复杂;先获取cache;在获取值的包装类,在获取值,而且每一步都要检查是否为null好麻烦,有更简便的做法吗
 
无
回复
1个回答
test
2024-06-23
- 第一个问题,
spring cache实现如此,怪也得按格式写。 - 第二个问题,可以给缓存类用 
@CacheConfig(cacheNames = "test")对此类统一设置来替代在application.yml配置文件中配置,以解决IDE的警告;但一般不推荐这么做,因为一个缓存类下要定义多个缓存的时候就不合适了,一般是要在缓存类的每个缓存方法(@Cacheable/@CachePut/@CacheEvict)中定义(还因为缓存一般要实现过期时间)。 - 第三个问题,代码用法不对。取缓存的值仅调用 
@Cacheable注解的方法就行。有缓存值会返回值,无缓存值会执行方法体。当然在无缓存值的时候也会将返回值写入缓存,如果不希望写入缓存,可以用@Cacheable(cacheNames = "test", key = "#id", unless = "#result == 0")类似这种通过unless指明无缓存时不缓存的判断条件。 
回复
适合作为回答的
- 经过验证的有效解决办法
 - 自己的经验指引,对解决问题有帮助
 - 遵循 Markdown 语法排版,代码语义正确
 
不该作为回答的
- 询问内容细节或回复楼层
 - 与题目无关的内容
 - “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容