美文网首页
redis - 内存回收策略

redis - 内存回收策略

作者: 沐兮_d64c | 来源:发表于2021-03-01 15:02 被阅读0次

    1,简介

    redis内存回收主要体现在两个方面
    1)过期key的清理
    2)设置maxmemory,内存达到限制时触发数据淘汰

    2,过期key的清理

    redisDb数据结构
    expires字典:保存了所有键的过期时间,值使用unix时间戳

    image.png
    1)惰性删除
    读写一个过期key时,会触发惰性删除。
    2)定时删除
    redis维护定时任务,默认1秒10次。随机抽取部分key,如失效,则删除
    3)主从模式的影响
    主节点才会执行两种key清理策略,发送DEL命令到从节点如果期间对从节点读操作,则仍会正常读取

    3,maxmemory与数据淘汰

    redisObject数据结构
    lru:记录对象最后一次被命令程序访问的时间。使用object idletime $key 可以查看key的空转时间
    参与数据淘汰:当使用内存操作maxmemory时,会触发数据淘汰策略。使用volatile-lru、allkeys—lru时,redis会淘汰空转时间最长的对象
    maxmemory_samples:随机取固定数目的key基于server.maxmemory_samples,按照访问时间排序,淘汰的最不经常使用的。

    image.png
    1)maxmemory、maxmemory-policy配置
    redis.conf:配置maxmemory
    config命令:CONFIG SET maxmemory 100MB
    image.png
    2)数据淘汰策略
    volatile-lru:只对设置了过期时间的内存数据集进行LRU
    allkeys-lru:对所有内存数据集进行LRU
    noeviction:永不过期
    volatile-ttl:删除即将过期的数据
    volatile-random:随机删除即将过期的数据
    allkeys-random:随机删除数据

    4,Redis LFU实现

    Redis4.0之后出现的数据淘汰策略:使用LRU并不精确,不能准确的识别热点key
    1)LFU按最近的访问频率进行淘汰,将lru字段分成16bit + 8bit。
    高16bit:最近一次计数器降低的时间ldt (last decrement time)
    低8bit:用来存储访问频次,logc (logistic counter)
    2)数据淘汰策略
    volatile-lfu:对有过期时间的key采用LFU淘汰算法
    allkeys-lfu:对全部key采用LFU淘汰算法
    3)参数配置
    lfu-log-factor:调整logc的增长速度,lfu-log-factor越大,增长越慢
    lfu-decay-time:以分钟为单位的数值,调整logc的减少速度

    相关文章

      网友评论

          本文标题:redis - 内存回收策略

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