【发布时间】:2021-11-03 17:35:26
【问题描述】:
是否存在类似于@CacheEvict(value = "FOO", key = "baz*") 的内容,以便当缓存FOO 包含键baz_1 和baz_2 时,它们会被驱逐?
【问题讨论】:
标签: spring spring-boot redis spring-cache
是否存在类似于@CacheEvict(value = "FOO", key = "baz*") 的内容,以便当缓存FOO 包含键baz_1 和baz_2 时,它们会被驱逐?
【问题讨论】:
标签: spring spring-boot redis spring-cache
假设您将 spring-boot-starter-cache 作为依赖项,spring boot 会自动配置一个名为 cacheManager 的 CacheManager bean。
另外,假设您有 spring-boot-starter-data-redis 作为依赖项,RedisCacheManager 被选为 CacheManager 实现。
@CacheEvict(和缓存抽象 API)不允许您选择按前缀驱逐,但使用 AOP 建议(或其他适合的地方),您可以利用底层实现:
RedisCache redisCache = (RedisCache) cacheManager.getCache("FOO");
redisCache.getNativeCache().clean("FOO", "baz*".getBytes());
实际上并没有尝试过,但我认为这应该可以。
同样,您可以适应其他缓存实现。
这种方法的缺点是,您必须在更改缓存实现时更改代码。
【讨论】: