微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring缓存实现

如何解决Spring缓存实现

我正在探索春季缓存设施。我对此几乎没有疑问。

首先,应将其应用于服务方法级别或DAO方法级别,其中服务方法正在调用DAO方法

第二,如何避免缓存数据过时?

解决方法

IMO,这两个问题的答案都是“取决于”。

从技术上讲,Spring Wise可以在Service和DAO上应用缓存注释,但我认为这没有什么区别,因此可以归结为具体的用例。

例如,如果您“逻辑上”计划提供可缓存的抽象,以表示由于服务器上执行的某些计算过程而应计算的内容,则最好在服务级别使用缓存。

另一方面,如果您在DAO中有一个看起来像Something getSomethingById(id)的DAO方法,并且希望避免对基础数据库进行相对昂贵的调用,则可以在道话虽如此,如果您有List<Something> fetchAll()List<Something> fetchAllByFilter()之类的方法,则应用缓存可能不会有用。如果您正在使用JPA(由Hibernate实现),则它们具有自己的缓存抽象,但是这种类型超出了问题的范围,只是您应该了解的内容...

Internet上有很多教程,一些教程说明了基于服务的方法,一些教程介绍了DAO的方法注释,但同样,这些只是简单的示例,在现实世界中,您必须做出决定。

现在关于第二个问题。一般而言,如果您的数据变化不大,缓存是有意义的,因此,如果数据经常变化,则首先要进行缓存,然后缓存可能与用例不相关。

除此之外,还有许多技巧:

  • 缓存数据逐出(通常基于时间)。参见this tutorial
  • 某种消息传递系统,它将发送有关缓存条目更改的消息。如果您具有分布式应用程序,并且仅将高速缓存保留在内存中,则此选项特别有用。收到消息时,您可以选择“缓存复制”或完全清除缓存,以便最终将新数据“填充”
  • 使用类似于Hazelcast或Redis的分布式缓存技术,而不是使用内存中缓存。因此从技术上讲,缓存提供程序将确保缓存的数据一致性。

我还要向您推荐This tutorial-演讲者谈到了缓存实现的不同方面,我认为这与您的问题确实相关。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。