我在 Openshift 中有两个微服务 Pod,我想清理这两个微服务的缓存。我有一个清除缓存的端点,请求仅进入一个 Pod。如何避免重新启动 pod 来清除缓存?我使用 2.1.10 springboot,每两个小时配置一次 cron,但我想清理 HTTP 请求中的缓存。
我在请求中使用 org.springframework.cache.annotation 中的 @Cacheable ,并使用 org.springframework.cache.CacheManager.clear 来逐出/清理缓存。
就像Spring框架中的其他服务一样,缓存服务是一个抽象,而不是一个实现,需要使用一个实现来存储缓存数据。这种抽象由 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口具体化。
您还没有谈到您的 Spring 缓存实现,所以我认为您正在使用默认实现。
默认情况下,Spring选择java.util.concurrent.ConcurrentMap。此实现将您的数据存储在内存中,并在您关闭 JVM 时消失。对于具有多个 Pod 的具体环境,您需要一个集群感知缓存实现。您不能依赖基于内存存储的缓存实现。
因此,您应该查看 Spring Redis Cache 等实现,这是一个集群感知的缓存实现,并在所有 pod 中配置它。
我可以推荐2个选项。