美文网首页
Redis的过期策略

Redis的过期策略

作者: gigglesoso | 来源:发表于2020-04-21 11:49 被阅读0次

    思考:

    1、不设置过时时间的key就一定不会过期一直存在吗?

    2、设置了超时时间的key在超过超时时间后就一定会被清除吗?

    一、redis删除策略采用的是定期删除和惰性删除:

    定期删除:每隔一定时间间隔,将随机扫描其中的一定数量的key,校验key是否过期,过期即删除。

    惰性删除:当去获取某key或者对某key设置值时,校验当前key是否过期,若过期则删除;

    二、redis的内存策略:

    redis有maxmemory 的设置,当数据占用的内存数量超过这个值时,则会调用自己的内存机制,根据不同的策略淘汰相应的数据,以回收内存。(很像jvm的gc)

    1)noeviction: 拒绝写操作, 读、删除可以正常使用。默认策略,不建议使用;

    2)allkeys-lru: 移除最近最少使用的key,最常用的策略;

    3)allkeys-random:随机删除某个key,不建议使用;

    4)volatile-lru:在设置了过期时间的key中,移除最近最少使用的key,不建议使用;

    5)volatile-random:在设置了过期时间的key中,随机删除某个key,不建议使用;

    6)volatile-ttl: 在设置了过期时间的key中,把最早要过期的key优先删除。

    allkeys-lru中lru是Least recently used的缩写,最近很少使用的意思。

    因此回过头看上面两个问题:

    1、不一定,因为可能在redis内存回收时候使用了allkeys-lru策略,该未设置超时时间的key也被移除了;

    2、不一定,因为惰性删除只是随机校验一定数量的key是否过期,因此可能存在该key已经过期,但是没有校验到,导致一直在内存中存在。

    相关文章

      网友评论

          本文标题:Redis的过期策略

          本文链接:https://www.haomeiwen.com/subject/jytuihtx.html