如何逐出多个 pods 中的缓存?我有两个 Openshift pods,我想在两个 pods 中发送 HTTP 请求以逐出缓存

How to evict cache in multiple pods? I have two Openshift pods and I want to send a HTTP request for evict cache in both pods

我在 Openshift 中有两个微服务 pods,我想清除这两个微服务的缓存。我有一个清除缓存的端点,请求只进入一个 pod。如何避免重新启动 pods 以清除缓存?我使用 2.1.10 springboot,我每两个小时配置一次 cron,但我想清理 HTTP 请求中的缓存。

我在请求中使用来自 org.springframework.cache.annotation 的 @Cacheable,并在 evict/clean 缓存中使用 org.springframework.cache.CacheManager.clear。

就像 Spring 框架中的其他服务一样,缓存服务是一个抽象,而不是一个实现,需要使用一个实现来存储缓存数据。这种抽象由 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口具体化。

您还没有谈到哪个是您的 Spring 缓存实现,所以我想您使用的是默认实现。

默认情况下,Spring 选择 java.util.concurrent.ConcurrentMap。此实现将您的数​​据存储在内存中,并在您关闭 JVM 时将其消失。对于您的具体环境,具有倍数 pods,您需要一个 集群感知缓存实现 。您不能依赖基于内存存储的缓存实现。

因此,您应该检查像 Spring Redis Cache 这样的实现,它是一个集群感知缓存实现,并在您的所有 pods.

中配置它