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 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容