如何清除多个 Pod 中的缓存?我有两个 Openshift Pod,我想发送 HTTP 请求以清除两个 Pod 中的缓存

问题描述 投票:0回答:2

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

我在请求中使用 org.springframework.cache.annotation 中的 @Cacheable ,并使用 org.springframework.cache.CacheManager.clear 来逐出/清理缓存。

java spring-boot kubernetes openshift spring-cache
2个回答
1
投票

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

您还没有谈到您的 Spring 缓存实现,所以我认为您正在使用默认实现。

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

因此,您应该查看 Spring Redis Cache 等实现,这是一个集群感知的缓存实现,并在所有 pod 中配置它。


0
投票

我可以推荐2个选项。

  1. 让服务与 kafka 主题对话,而不是发送 HTTP 请求。每个 Pod 应该属于不同的消费者组。发送一条 kafka 消息以清除两个消费者上的缓存。
  2. 使 Pod 与 Redis 数据库通信。如果一个 Pod 收到驱逐缓存的请求,则使用某种时间戳更新 Redis 数据库。另一个经常检查 redis 数据库的 pod 也会做同样的事情。
© www.soinside.com 2019 - 2024. All rights reserved.