在 Spring Boot 应用程序中,我正在从使用 Caffeine 实现的本地缓存迁移到 Redis 分布式缓存。
我在 Caffeine
缓存中看到我们可以设置最大条目数
Cache cache = new CaffeineCache(cacheName, Caffeine.newBuilder()
.recordStats()
.expireAfterWrite(expireIn, TimeUnit.SECONDS)
.maximumSize(maxSize)
.build());
可以在 Redis
代码中实现同样的效果吗?我需要为不同的缓存名称设置不同的值。
最佳答案
不,这不可能有两个原因。
Spring 不支持设置 Redis 缓存的 maxSize 引用:
RedisCacheConfiguration
即使 Spring 支持这一点,也很难跟踪事件的缓存条目。
为了支持最大大小,我们需要有关当前未过期/未逐出 key 的详细信息。找到这些需要扫描所有缓存键。一种简单的方法可以跟踪另一个 Redis SET 数据结构中的所有缓存键。由于您现在拥有事件的缓存键,我们需要应用一些后台策略来删除一个或多个键。删除这些键也不是一件容易的事,你需要看看应该删除哪一个,是 FIFO、LRU 还是 ?。
我建议在 RedisCacheWriter
的帮助下实现您自己的算法。在添加/删除缓存时,您可以更新缓存键。此外,您需要运行一个后台作业,该作业将按一定的时间间隔运行以限制事件缓存条目。
关于spring - 如何在 Spring Boot 应用程序的 Redis 缓存管理器中设置不同缓存的最大条目数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61815891/