如何在 spring 引导应用程序的 Redis 缓存管理器中设置不同缓存的最大条目数?

How to set max number of entries for different caches in the Redis cache manager in spring boot application?

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

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

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

可以在 Redis 的代码中实现相同的功能吗?我需要为不同的缓存名称设置不同的值。

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

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

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

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

我建议在 RedisCacheWriter 的帮助下实现您自己的算法。这里同时 adding/removing 到缓存,你可以更新你的缓存键。此外,您需要 运行 一个后台作业,该作业会 运行 以特定的时间间隔来限制活动缓存条目。