使用 Spring 缓存和将数据保存在变量中有什么区别?
What's difference of using Spring Cache and keeping data in a variable?
几天前,我在一个项目的 Spring 框架中实现了缓存功能,这很有趣,但现在我想到了这个问题,即使用 Spring 缓存有什么区别并在应用程序启动时获取或初始化数据,并将其保存在一个可以通过 getter 访问的 spring bean 的变量中?
Spring 缓存比简单的 getter 更通用、更灵活且更复杂的机制。它允许使用不同的缓存提供程序、配置缓存失效...等等。
如果只需要一个 getter 就足够了 - 您应该使用 getter,以使您的应用程序尽可能简单。
如果您只有一个应用程序实例,您不关心任何更复杂的功能(下面列出)并且您正确地同步对变量的访问以供多线程使用,这没有区别。缓存就是缓存 - 您临时存储了一个计算或获取成本很高的值。
但是,SpringCache 为专门的缓存子系统(例如 EhCache、Redis...)提供通用接口。在 EhCache 中,您可以配置如下内容:
- 在缓存中保留多少元素(以限制内存使用)
- 如果已配置,它会管理 LRU 过期(例如,在满足某些配置的阈值后,最近最少使用的元素将从缓存中删除)
- 您可以选择是将缓存持久保存到磁盘还是仅将其保存在内存中或两者都选择
- 您可以从多个应用程序实例访问缓存
- 等等……
几天前,我在一个项目的 Spring 框架中实现了缓存功能,这很有趣,但现在我想到了这个问题,即使用 Spring 缓存有什么区别并在应用程序启动时获取或初始化数据,并将其保存在一个可以通过 getter 访问的 spring bean 的变量中?
Spring 缓存比简单的 getter 更通用、更灵活且更复杂的机制。它允许使用不同的缓存提供程序、配置缓存失效...等等。
如果只需要一个 getter 就足够了 - 您应该使用 getter,以使您的应用程序尽可能简单。
如果您只有一个应用程序实例,您不关心任何更复杂的功能(下面列出)并且您正确地同步对变量的访问以供多线程使用,这没有区别。缓存就是缓存 - 您临时存储了一个计算或获取成本很高的值。
但是,SpringCache 为专门的缓存子系统(例如 EhCache、Redis...)提供通用接口。在 EhCache 中,您可以配置如下内容:
- 在缓存中保留多少元素(以限制内存使用)
- 如果已配置,它会管理 LRU 过期(例如,在满足某些配置的阈值后,最近最少使用的元素将从缓存中删除)
- 您可以选择是将缓存持久保存到磁盘还是仅将其保存在内存中或两者都选择
- 您可以从多个应用程序实例访问缓存
- 等等……