【问题标题】:redis expiry keys holding memoryredis过期键持有内存
【发布时间】:2020-02-12 06:04:24
【问题描述】:

我们平均每秒过期 1000 个密钥,在拍摄快照时,我们碰巧看到转储的大小相对小于主数据库,因为快照不包括过期密钥的内存。由于过期键在我们的平台中持有大量内存,有什么方法可以让 redis 定期释放为过期键持有的内存。 (我们使用的是 2.8.21 引擎)或最新的 redis 引擎版本将无法有效解决此问题。 如果 stackoverflow 不适合我的问题,请引导我到正确的平台。

回收内存指南:https://docs.redislabs.com/latest/ri/memory-optimizations/reclaim-expired-keys-memory-faster/(但需要建议,升级是否会有很大帮助,或者像文档中提到的那样进行扫描会很好)

【问题讨论】:

    标签: redis stackexchange.redis node-redis redis-cluster redislabs


    【解决方案1】:

    从内存中删除过期的密钥:

    • 被动:当您尝试访问它并且发现密钥超时时。 这就是完整的SCAN 对您的帮助,它强制被动删除所有键空间。
    • 主动:每 100 毫秒,它会尝试从内存中删除过期的密钥 at random,每个周期在其上投入的时间不会超过 1 毫秒,直到它估计剩余的过期密钥少于 25%。逻辑不是那么简单,请参阅activeExpireCycle (2.8.21 version)。

    升级可能会有所帮助,因为有新的功能/配置设置,例如 activedefrag

    请参阅Redis filling up memory fast, running --bigkeys free it up 了解包括驱逐政策和有效到期频率在内的解决方案。

    【讨论】:

    • 将检查 SCAN 方法@leomurillo 并在此处更新,谢谢
    • 谢谢,SCAN 帮助释放了内存,但由于我们有近 2.5 亿个密钥,因此需要六个多小时。我们还有其他选择吗,或者这就是我们对 2.5 亿个密钥的预期。
    • 考虑按照stackoverflow.com/questions/59777591/… 中的建议增加hz。可以使用CONFIG SET hz 20 实时完成。另请参阅 stackoverflow.com/questions/59564896/…stackoverflow.com/questions/60055548/…,了解如何限制您的 SCAN
    • 您也可以使用 Lua 脚本,这样您就不会通过网络发送 SCAN 返回的密钥。
    • 在生产时间运行 REDIS SCAN 会影响系统吗?比如阻塞系统
    猜你喜欢
    • 2022-09-23
    • 2020-04-03
    • 2015-06-16
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多