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

标签 spring caching redis redis-cache

在 Spring Boot 应用程序中,我正在从使用 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 支持这一点,也很难跟踪事件的缓存条目。

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

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

关于spring - 如何在 Spring Boot 应用程序的 Redis 缓存管理器中设置不同缓存的最大条目数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61815891/

相关文章:

spring - 资源服务器端的 JWT 签名验证

symfony - gulp/Symfony2 : How can I avoid overwriting my js/css imports when cache busting?

java - 如何启用执行器中的所有端点(Spring Boot 2.0.0 RC1)

ruby-on-rails - 处理Rails.cache.fetch中的错误

php - 如何使查询和结果缓存适用于 Symfony2 和 Doctrine2 中关联实体的查询?

php - Redis 时间序列数据和时区

python - 如何在aiohttp中实现redis session过期

django - 我在使用 Celery、Redis 和 Django 时遇到问题

java - Spring Repository 删除规范

java - 使用 JPA 和 Spring 时如何更改 java.lang.Enum 的序数?