@CacheEvict 键是否可以匹配模式?
Is it possible to @CacheEvict keys that match a pattern?
是否有类似 @CacheEvict(value = "FOO", key = "baz*")
的内容,以便当缓存 FOO
包含键 baz_1
和 baz_2
时它们会被驱逐?
假设 你有 spring-boot-starter-cache
作为依赖项,spring 引导自动配置一个名为 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());
没有实际尝试,但我认为这应该可行。
同样,您可以适配其他缓存实现。
这种方法的缺点是您必须在更改缓存实现时更改代码。
是否有类似 @CacheEvict(value = "FOO", key = "baz*")
的内容,以便当缓存 FOO
包含键 baz_1
和 baz_2
时它们会被驱逐?
假设 你有 spring-boot-starter-cache
作为依赖项,spring 引导自动配置一个名为 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());
没有实际尝试,但我认为这应该可行。
同样,您可以适配其他缓存实现。
这种方法的缺点是您必须在更改缓存实现时更改代码。