在Spring Boot应用程序中清除远程Redis缓存

时间:2020-10-07 14:29:35

标签: spring spring-boot redis

我正在使用Spring Boot 2.3,并且正在使用通过app.properties使用的默认缓存机制。 我定义了所有值:

spring.cache.type = redis
spring.redis.host = host
spring.redis.port = port
spring.redis.timeout = 4000
spring.redis.password = psw
spring.cache.redis.time-to-live = 28800000

例如,我利用了Spring Repository中的缓存:

    @Cacheable(cacheNames = "contacts")
    @Override
    Page<Contact> findAll(Specification specification, Pageable pageable);

它按预期工作。但是Redis是我的几个应用程序中使用的集群,我需要第二个应用程序能够删除Redis中的一些/所有键。

应用程序A1利用缓存并将密钥放入其中。应用程序A2需要清除某些键或所有键。

在A2中,我做到了:

cacheManager.getCacheNames().forEach(cacheName -> cacheManager.getCache(cacheName).clear());

但是当然,缓存名称列表是空的,因为在此应用程序中,我不向缓存中添加密钥,而且无论如何,我没有与A1相同的密钥。 我应该列出远程键,然后需要清除它们。有没有不使用Spring Data Redis库的简单方法吗?

1 个答案:

答案 0 :(得分:0)

您可以为Redis中的整个缓存定义一个separate prefix。类似于您的缓存条目的名称空间。 然后,您可以刷新此命名空间中的所有键。

请注意:确保CacheManager仅具有Redis缓存,并且没有内存缓存(L1)。