• Redis内存淘汰策略


    Redis内存淘汰策略

    内存淘汰:就是当Redis内存使用达到设置的上限时,主动挑选部分key删除以释放更多内存的流程。Redis会在处理客户端命令的方法processCommand()中尝试做内存淘汰:

    在这里插入图片描述

    淘汰策略

    Redis支持8种不同策略来选择要删除的key:

    • noeviction: 不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略。
    • volatile-ttl: 对设置了TTL的key,比较key的剩余TTL值,TTL越小越先被淘汰
    • allkeys-random:对全体key ,随机进行淘汰。也就是直接从db->dict中随机挑选
    • volatile-random:对设置了TTL的key ,随机进行淘汰。也就是从db->expires中随机挑选。
    • allkeys-lru: 对全体key,基于LRU算法进行淘汰
    • volatile-lru: 对设置了TTL的key,基于LRU算法进行淘汰
    • allkeys-lfu: 对全体key,基于LFU算法进行淘汰
    • volatile-lfu: 对设置了TTL的key,基于LFI算法进行淘汰
      比较容易混淆的有两个:
      • LRU(Least Recently Used),最少最近使用。用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。
      • LFU(Least Frequently Used),最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高。

    Redis的数据都会被封装为RedisObject结构:

    在这里插入图片描述

    LFU的访问次数之所以叫做逻辑访问次数,是因为并不是每次key被访问都计数,而是通过运算:

    • 生成0~1之间的随机数R
    • 计算 (旧次数 * lfu_log_factor + 1),记录为P
    • 如果 R < P ,则计数器 + 1,且最大不超过255
    • 访问次数会随时间衰减,距离上一次访问时间每隔 lfu_decay_time 分钟,计数器 -1

    最后用一副图来描述当前的这个流程吧

    在这里插入图片描述

  • 相关阅读:
    使用域名访问网站或者静态页面
    什么是多域名证书?
    Termux设置自启动
    时间序列分析(12)| 脉冲响应函数、格兰杰因果检验
    Rust冒泡排序
    智能物联网解决方案:蓝牙IOT主控模块打造高效监测和超低功耗
    【后端开发实习】用Nodejs操作mongodb结合Mongoose实现数据库操作
    Vue.js入门教程(八)
    为什么会出现需求变更,如何应对?
    MySQL备份与恢复
  • 原文地址:https://blog.csdn.net/admin3335/article/details/127432093