【发布时间】:2020-08-31 05:27:25
【问题描述】:
我正在探索弹簧缓存设施。我对此有一些疑问。
首先,它应该应用在服务方法级别还是DAO方法级别,其中服务方法正在调用DAO方法。
二、如何避免缓存数据过时?
【问题讨论】:
标签: spring-boot caching spring-cache
我正在探索弹簧缓存设施。我对此有一些疑问。
首先,它应该应用在服务方法级别还是DAO方法级别,其中服务方法正在调用DAO方法。
二、如何避免缓存数据过时?
【问题讨论】:
标签: spring-boot caching spring-cache
IMO,这两个问题的答案都是“视情况而定”。
从技术上讲,Spring Wise、Service 和 DAO 上应用的缓存注释都可以工作,我认为没有任何区别,所以归结为具体的用例。
例如,如果您“从逻辑上”计划提供一个可缓存的抽象,该抽象应作为在服务器上完成的某些计算过程的结果进行计算,您最好在服务级别使用缓存。
另一方面,如果您在 dao 中有一个类似于 Something getSomethingById(id) 的 DAO 方法,并且您希望避免对底层数据库进行相对昂贵的调用,则可以在 DAO 级别提供缓存。话虽如此,如果您有List<Something> fetchAll() 或List<Something> fetchAllByFilter() 之类的方法,应用缓存可能没有用。如果您使用的是 JPA(使用 Hibernate 实现),他们有自己的缓存抽象,但它超出了问题的范围,只是您应该注意的事情......
互联网上有很多可用的教程,有些说明了基于服务的方法,有些适用于 DAO 的方法注释,但同样,这些只是简单的示例,在现实世界中您必须做出决定。
现在关于第二个问题。一般来说,如果您的数据变化不大,那么缓存是有意义的,所以首先如果它经常变化,那么缓存可能不适合/不适合用例。
除此之外,还有很多技巧:
我还想向您推荐This tutorial - 演讲者谈到了缓存实现的不同方面,我认为这与您的问题非常相关。
【讨论】: