zoukankan      html  css  js  c++  java
  • redis 过期策略

    过期策略

    定期删除+惰性删除

    所谓定期删除,指的是 redis 默认是每隔 100ms随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。

    1.注意,这里可不是每隔 100ms 就遍历所有的设置过期时间的 key。而是每隔 100ms 随机抽取一些 key 来检查和删除的。

    2.问题,定期删除可能会导致很多过期 key 到了时间并没有被删除掉,所以就有了惰性删除:

    即在你获取某个 key 的时候,redis 会检查一下这个 key, 如果设置了过期时间并且过期了,则在此时就删掉这个key,不会返回任何内容。

    3.实际上,如果定期删除漏掉了很多过期 key,也没去查询这些key,也就没走惰性删除,那么如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了,咋整?

    答案是:走内存淘汰机制。

    内存淘汰机制

    --redis官方文档

    redis 内存淘汰机制有以下几个:

    • allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 key。最常用的
    • noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错。
    • allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 key。
    • volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 key。
    • volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 key。
    • volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 key 优先移除。

    LRU相关请移步这篇文章LRU

  • 相关阅读:
    【转载】使用Jquery操作Cookie对象
    PHP实现双向链表、栈
    Mysql触发器、模糊查找、存储过程、内置函数
    List、Set、Map、数组之间各种转换
    Android -- 压缩与解压文件
    Android -- 动态添加布局
    Android -- Service绑定解绑和aidl
    Android -- 图像处理(信息量超大)
    Android -- 利用Broadcast开启Service
    Android -- Service的开启关闭与生命周期
  • 原文地址:https://www.cnblogs.com/charm-j/p/10373410.html
Copyright © 2011-2022 走看看