0

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

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

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

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

4

1 回答 1

3

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

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

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

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

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

于 2020-05-21T03:41:32.523 回答