【问题标题】:How to set max number of entries for different caches in the Redis cache manager in spring boot application?如何在 Spring Boot 应用程序的 Redis 缓存管理器中设置不同缓存的最大条目数?
【发布时间】:2020-09-01 01:57:32
【问题描述】:

在 Spring Boot 应用程序中,我正在从使用 Caffeine 实现的本地缓存迁移到 Redis 分布式缓存。

我在Caffeine缓存中看到我们可以设置最大条目数

Cache cache = new CaffeineCache(cacheName, Caffeine.newBuilder()
                .recordStats()
                .expireAfterWrite(expireIn, TimeUnit.SECONDS)
                .maximumSize(maxSize)
                .build());

Redis 的代码中可以实现同样的效果吗?我需要为不同的缓存名称设置不同的值。

【问题讨论】:

    标签: spring caching redis redis-cache


    【解决方案1】:

    不,这不可能有两个原因。

    1. Spring 不支持为 Redis 缓存设置 maxSize 参考:RedisCacheConfiguration

    2. 即使 Spring 支持这一点,也很难跟踪活动缓存条目。

    为了支持最大大小,我们需要有关当前未过期/未逐出键的详细信息。找到这些需要扫描所有缓存键。一种简单的方法可以跟踪另一个 Redis SET 数据结构中的所有缓存键。由于您现在有活动的缓存键,我们需要应用一些后台策略来删除一个或多个键。删除这些键也不容易,您需要查看应该删除哪一个,FIFO、LRU 还是?。

    我建议在RedisCacheWriter 的帮助下实现您自己的算法。在这里添加/删除缓存时,您可以更新缓存键。此外,您需要运行以特定间隔运行的后台作业,以限制活动缓存条目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2018-11-29
      • 2020-04-23
      • 2011-01-02
      • 2021-05-23
      • 2021-07-04
      相关资源
      最近更新 更多