如何在 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
的代码中实现相同的功能吗?我需要为不同的缓存名称设置不同的值。
不,这不可能有两个原因。
Spring不支持为Redis缓存设置maxSize参考:RedisCacheConfiguration
即使 Spring 支持这一点,也很难跟踪活动的缓存条目。
为了支持最大大小,我们需要有关当前 non-expired/non-evicted 个键的详细信息。找到这些需要扫描所有缓存键。一种简单的方法可以跟踪另一个 Redis SET 数据结构中的所有缓存键。由于您现在有活动的缓存键,我们需要应用一些后台策略来删除一个或多个键。删除这些key也不是那么容易,你需要看看应该删除哪一个,FIFO,LRU,还是?。
我建议在 RedisCacheWriter
的帮助下实现您自己的算法。这里同时 adding/removing 到缓存,你可以更新你的缓存键。此外,您需要 运行 一个后台作业,该作业会 运行 以特定的时间间隔来限制活动缓存条目。
在 Spring 引导应用程序中,我正在从使用 Caffeine
实现的本地缓存迁移到 Redis
分布式缓存。
我在 Caffeine
缓存中看到我们可以设置最大条目数
Cache cache = new CaffeineCache(cacheName, Caffeine.newBuilder()
.recordStats()
.expireAfterWrite(expireIn, TimeUnit.SECONDS)
.maximumSize(maxSize)
.build());
可以在 Redis
的代码中实现相同的功能吗?我需要为不同的缓存名称设置不同的值。
不,这不可能有两个原因。
Spring不支持为Redis缓存设置maxSize参考:
RedisCacheConfiguration
即使 Spring 支持这一点,也很难跟踪活动的缓存条目。
为了支持最大大小,我们需要有关当前 non-expired/non-evicted 个键的详细信息。找到这些需要扫描所有缓存键。一种简单的方法可以跟踪另一个 Redis SET 数据结构中的所有缓存键。由于您现在有活动的缓存键,我们需要应用一些后台策略来删除一个或多个键。删除这些key也不是那么容易,你需要看看应该删除哪一个,FIFO,LRU,还是?。
我建议在 RedisCacheWriter
的帮助下实现您自己的算法。这里同时 adding/removing 到缓存,你可以更新你的缓存键。此外,您需要 运行 一个后台作业,该作业会 运行 以特定的时间间隔来限制活动缓存条目。