@CacheEvict 键是否可以匹配模式?

Is it possible to @CacheEvict keys that match a pattern?

是否有类似 @CacheEvict(value = "FOO", key = "baz*") 的内容,以便当缓存 FOO 包含键 baz_1baz_2 时它们会被驱逐?

假设 你有 spring-boot-starter-cache 作为依赖项,spring 引导自动配置一个名为 cacheManagerCacheManager bean。

此外,假设您有 spring-boot-starter-data-redis 作为依赖项,RedisCacheManager 被选为 CacheManager 实现。

@CacheEvict(以及缓存抽象 API)不允许您选择按前缀逐出,但使用 AOP 建议(或其他合适的地方),您可以利用底层实现:

    RedisCache redisCache = (RedisCache) cacheManager.getCache("FOO");
    redisCache.getNativeCache().clean("FOO",  "baz*".getBytes());

没有实际尝试,但我认为这应该可行。

同样,您可以适配其他缓存实现。

这种方法的缺点是您必须在更改缓存实现时更改代码。