自定义 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 和过期时间

带有 Celery 的 redis 键的自定义前缀

自定义session过期时间

fix bug:Redis序列化算法不一致导致乱码问题的原因及自定义序列化解决方案

自定义WordPress博客主题时总显示:会话已过期,请重新登录。您不会被带离此页。

自定义WordPress博客主题时总显示:会话已过期,请重新登录。您不会被带离此页。