代码之家  ›  专栏  ›  技术社区  ›  Chris

redis的被动方式失效

  •  1
  • Chris  · 技术社区  · 7 年前

    我在学习的时候有个问题 Redis 与文档。
    以下是redis官方文档中关于过期的描述: https://redis.io/commands/expire

    Specifically this is what Redis does 10 times per second:
    1. Test 20 random keys from the set of keys with an associated expire.
    2. Delete all the keys found expired.
    3. If more than 25% of keys were expired, start again from step 1.
    

    在我读了这篇文章之后,我有一个问题 25% of keys 上面。
    什么是 keys 意义在 25%键 确切地?
    这个 钥匙 所有的钥匙都在redis里吗?或 20 random keys 在上面的描述中?

    我认为 钥匙 看起来像redis中的所有键。
    我在文件中找不到关于这个的任何描述。

    谢谢您。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ryan Walker    7 年前

    默认情况下,redis中的密钥没有设置生存时间(ttl)。该算法中的20个随机密钥是从所有设置了显式ttl的密钥集中抽取的。如果此示例中超过5个密钥已过期,那么redis中过期密钥的部分很可能很高,因此该算法会重复尝试将过期密钥的部分降低到阈值以下。

    还需要注意的是,超过ttl的密钥将在访问时自动过期(这意味着如果用户试图请求它们)。所以像这样的启发式算法只需要确保redis不会堆积一堆过期密钥,同时确保redis不会花费太多资源清理过期密钥。

    请参阅源代码: https://github.com/antirez/redis/blob/unstable/src/expire.c