内存中的Spring Redis缓存过期



使用Spring Redis缓存,想知道是否可以在内存中设置一些数据缓存持续时间。缓存的缓存。如果我知道Redis中的数据在5分钟内不会改变,我不需要每次调用@Cacheable方法时Spring Redis缓存都会接触Redis。Redisson是答案吗?

AFAICT,Redisson只是一个客户端facade或增强型Redis(Java)客户端,用于以更强大、更方便的方式与Redis节点(或集群)接口,与Spring Data Redis没有什么不同。例如,正如您所知,在Spring的缓存抽象中使用Redis作为缓存提供程序

Redis似乎确实支持客户端缓存(除了远程(服务器)缓存之外的本地缓存?),当使用Redis客户端/服务器拓扑时。这对您的应用程序(例如@Cacheable)是透明的,并在Redis客户端驱动程序AFAIK中进行配置。

然而,由于我对Redis,甚至Redisson缺乏经验,我无法详细介绍这个功能。Redis客户端缓存可能需要Redis客户端驱动程序(例如Jedis、Lettuse甚至Redisson等)的支持。

现在,对于感兴趣的读者来说,这是一个冗长的答案:

当你陈述";高速缓存的高速缓存";道听途说,是真的有一个"本地可用高速缓存";除了";远程或服务器端高速缓存";。当然,这是假设您首先在客户端/服务器(非嵌入式)中运行Redis,并且可能是分布式/集群(可能是HA)容量。

理想情况下,您应该选择一个缓存提供程序,它支持这种开箱即用的本地排列。而且,尽管人们普遍相信(例如);重新发明的";(横向扩展或集群、HA,甚至持久性)已经存在于其他更成熟的解决方案中,这些解决方案从头开始就考虑到了这些问题。

SIDENOTE:当然,上面引用的文章已经过时了,但也有点天真。

;(a)高速缓存"的高速缓存;在技术上称为近缓存模式

这就是";本地";(应用程序/客户端)高速缓存镜像";远程";(服务器端和主)高速缓存,以避免[a]网络跳,即延迟,只在必要时访问远程高速缓存(例如,高速缓存未命中),最好是在";"单跳"容错";时尚,当服务器端是分布式和集群的。

然而,本地高速缓冲存储器和服务器端远程高速缓冲存储器之间的根本区别在于,本地高速缓存仅存储来自基于";利益";。

注意:在Redis的文档中,他们将其称为";跟踪";。在不同的提供者之间,有不同的方式来表达";利益;或者跟踪客户端访问了什么。注意这里的不同方法,因为它们消耗不同的系统资源。

您可能有一个分布式(Web/MicrosoftService)应用程序体系结构,其中几个客户端应用程序实例为不同的人口统计或最终用户群体提供服务。显然,这些客户端应用程序实例可能使用存储在服务器中的主数据集的共享但不同的子集。这是本地高速缓存和";登记利息";只有在与客户端应用程序相关或由客户端应用程序使用的数据中才会发挥作用。

"登记利益";这一点很重要,因为服务器端的远程缓存可以在客户端感兴趣的服务器上的数据发生变化时通知托管本地缓存的客户端("推送",而不是客户端"拉取"),因为可能有1个以上的客户端感兴趣并使用相同的数据(例如"记录"和数据的交集)。

那么,我们如何在不必要地将额外(多层)复杂性引入系统/应用程序体系结构的情况下正确地解决这一问题呢?

首先,它首先要为手头的问题选择正确的缓存提供程序

免责声明:我的经验源于Apache Geode,它是VMware Tanzu GemFire的OSS变体,我负责VMware的Apache Geode的所有事情。

虽然我在这里有点偏见,但其他缓存提供商(以及完整的IMDG解决方案)支持相同的安排并不罕见。例如,我个人最喜欢的一个是Hazelcast

Hazelcast将这种特定的缓存安排或拓扑称为"缓存";嵌入的";缓存,甚至将其称为"缓存";近高速缓存";在文档中。

本地嵌入式";近高速缓存";它避免了不必要的网络跳跃带来的延迟,然而,兴趣注册是尽可能保持数据一致性的关键。

在这里的Spring Boot for Apache Geode文档中,我记录、讨论甚至演示了使用Spring for Apache Geode时的不同缓存模式,尤其是近缓存,以及示例中的近缓存示例和其他高速缓存模式)。

我相信您可以在其他缓存提供程序中找到类似的资源,甚至Redis。

无论如何,本文档应帮助您了解在选择任何拓扑和配置时需要注意的不同问题(例如内存消耗)。

祝你好运!

最新更新