【问题标题】:Is it possible to @CacheEvict keys that match a pattern?是否可以 @CacheEvict 匹配模式的键?
【发布时间】:2021-11-03 17:35:26
【问题描述】:

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

【问题讨论】:

    标签: spring spring-boot redis spring-cache


    【解决方案1】:

    假设您将 spring-boot-starter-cache 作为依赖项,spring boot 会自动配置一个名为 cacheManagerCacheManager bean。

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

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

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

    实际上并没有尝试过,但我认为这应该可以。

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

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

    【讨论】:

    • 您的假设是正确的。有效。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2022-06-22
    相关资源
    最近更新 更多