Java 如何逐出多个存储舱中的缓存?我有两个Openshift播客,我想在这两个播客中发送一个逐出缓存的HTTP请求

Java 如何逐出多个存储舱中的缓存?我有两个Openshift播客,我想在这两个播客中发送一个逐出缓存的HTTP请求,java,spring-boot,kubernetes,openshift,spring-cache,Java,Spring Boot,Kubernetes,Openshift,Spring Cache,我在Openshift中有两个微服务吊舱,我想清理这两个微服务的缓存。我有一个端点,清除逐出缓存,请求只进入一个pod。如何避免重新启动POD以清除缓存?我使用2.1.10 springboot,每两小时配置一个cron,但我想清理HTTP请求中的缓存 我在请求中使用org.springframework.cache.annotation中的@Cacheable和org.springframework.cache.CacheManager.clear来逐出/清除缓存。与Spring框架中的其他服

我在Openshift中有两个微服务吊舱,我想清理这两个微服务的缓存。我有一个端点,清除逐出缓存,请求只进入一个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中配置它。

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

您没有提到哪个是Spring缓存实现,因此我假设您使用的是默认实现

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


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

我想向所有运行的pod发送HTTP请求。。。我是如何使用springboot的?为什么您更喜欢使用HTTP请求而不是选择SpringRedis缓存作为缓存实现?很抱歉,但您确实不想发送HTTP请求。只是您认为HTTP请求可以解决您的问题。首先阅读著名的XY问题。初始问题中的另一个错误是:您所说的cron是为了清理由CacheManager管理的缓存。一些缓存实现有一个称为“过期”的概念。Spring中的默认实现ConcurrentMap不支持它,但其他的如咖啡因(内存中)或Redis缓存(集群感知)都支持它。因此,如果您现在更改实现,您将能够配置expiration属性,并摆脱cronI向所有运行的pod发送HTTP请求的请求。。。我是如何使用springboot的?为什么您更喜欢使用HTTP请求而不是选择SpringRedis缓存作为缓存实现?很抱歉,但您确实不想发送HTTP请求。只是您认为HTTP请求可以解决您的问题。首先阅读著名的XY问题。初始问题中的另一个错误是:您所说的cron是为了清理由CacheManager管理的缓存。一些缓存实现有一个称为“过期”的概念。Spring中的默认实现ConcurrentMap不支持它,但其他的如咖啡因(内存中)或Redis缓存(集群感知)都支持它。因此,如果现在更改实现,您将能够配置expiration属性并删除cron