自定义 Redis 过期密钥算法
Posted
技术标签:
【中文标题】自定义 Redis 过期密钥算法【英文标题】:Customize Redis Expiration Keys Algorithm 【发布时间】:2022-01-07 09:48:21 【问题描述】:我的一个微服务项目存在性能问题,即连接或执行命令到 redis 的延迟很高。经过一番调查,我得出了这个结论:
根据 Redis 文档,用于过期键的 redis 算法是:
-
从具有关联过期时间的密钥集中测试 20 个随机密钥。
删除所有发现过期的密钥。
如果超过 25% 的密钥过期,请从第 1 步重新开始。
在我的项目中,每秒创建或更新 30 个密钥,其 ttl 为 10 分钟,大约是所有存储密钥的三分之一。
这是否意味着在大多数算法的执行中,我们满足第三步的条件,并且 redis 在过期键上消耗了大部分资源?如果是这样,我可以通过更改一些配置来自定义或覆盖该算法的默认行为吗?或者有什么替代方案吗?
【问题讨论】:
【参考方案1】:如果您的附加密钥是非易失性的,则不应考虑 25% 或更多的密钥已过期。
默认的redis config 有active-expire-effort 1
在1-10的范围内。增加只会分配更多的 CPU 来清理。但是,如果到期不是延迟的根本原因,增加也可能不会产生影响。从这里的信息来看,鉴于您将拥有约 18k 易失性密钥,密钥到期可能不是问题。
在替代方案方面,您可以进一步考虑troubleshooting。
【讨论】:
以上是关于自定义 Redis 过期密钥算法的主要内容,如果未能解决你的问题,请参考以下文章
spring-redis-session 自定义 key 和过期时间
fix bug:Redis序列化算法不一致导致乱码问题的原因及自定义序列化解决方案