Spring Cache如何简化和优化?

作者站长头像
站长
· 阅读数 6

关于spring缓存的问题:

Spring Cache如何简化和优化?

Spring Cache如何简化和优化?

  1. 类似我通过注解方式定义的缓存,我定义了设置缓存,获取缓存、删除缓存三个方法,但我感觉其中设置、删除缓存方法都很奇怪,设置缓存居然要提供返回值才能实际设置;删除缓存又是一个空的方法体。缓存是通过这种方式使用的吗?我感觉很奇怪
  2. 我在 application.yml 中配置了缓存的 cache-names;然后使用 @Cachable 注解IDE还是会提示要提供 name,有办法取消这种警告吗
  3. 上面获取缓存的值的方法我感觉有点复杂;先获取cache;在获取值的包装类,在获取值,而且每一步都要检查是否为null好麻烦,有更简便的做法吗

回复
1个回答
avatar
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 指明无缓存时不缓存的判断条件。
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容