当前位置: 首页 > wzjs >正文

网站建设用到什么广州网络推广公司有哪些

网站建设用到什么,广州网络推广公司有哪些,南昌网站建设公司资讯,网络运维工程师有前途吗Redis 的内存回收机制分为 过期 Key 自动淘汰 和 内存淘汰策略 两个核心部分,它们共同管理内存使用,避免溢出。以下从底层原理详细解析: 一、过期 Key 自动淘汰 当 Key 设置 TTL(过期时间)后,Redis 通过 惰…

Redis 的内存回收机制分为 过期 Key 自动淘汰内存淘汰策略 两个核心部分,它们共同管理内存使用,避免溢出。以下从底层原理详细解析:


一、过期 Key 自动淘汰

当 Key 设置 TTL(过期时间)后,Redis 通过 惰性删除定期抽样删除 两种策略回收内存:

1. 惰性删除(Lazy Expiration)
  • 原理
    • 访问 Key 时触发检查:每次读取 Key 前,先检查其是否过期,若过期则删除。
    • 写操作也会触发惰性删除。
  • 优点:对 CPU 友好,仅在访问时消耗资源。
  • 缺点:若 Key 长期不被访问,会持续占用内存。
  • 底层实现
    // Redis 源码(db.c)
    int expireIfNeeded(redisDb *db, robj *key) {if (!keyIsExpired(db,key)) return 0;// 删除过期 KeydeleteExpiredKeyAndPropagate(db,key);return 1;
    }
    
2. 定期抽样删除(Periodic Expiration)
  • 原理
    • Redis 每秒执行 10 次(可配置)定时任务,每次随机抽取一定数量 Key 检查过期。
    • 采用自适应算法:若某次抽样中过期 Key 比例超过 25%,则继续抽样,直到比例低于 25% 或超时。
  • 优点:减少内存泄漏风险。
  • 缺点:无法完全清理所有过期 Key。
  • 核心配置
    hz 10          # 每秒执行定时任务次数
    
  • 底层流程
    1. 遍历所有数据库。
    2. 随机抽取 ACTIVE_EXPIRE_CYCLE_KEYS_PER_LOOP(默认 20)个 Key。
    3. 删除过期 Key,统计删除数量。
    4. 若删除比例超过 25%,重复步骤 2。

二、内存淘汰策略(Eviction Policies)

当 Redis 内存达到 maxmemory 限制时,触发内存淘汰策略,删除 Key 以释放空间。策略分为 淘汰数据范围淘汰算法 两个维度:

1. 淘汰数据范围
策略说明
volatile-*仅淘汰设置了 TTL 的 Key
allkeys-*淘汰所有 Key(包括无 TTL 的 Key)
2. 淘汰算法
(1)LRU(Least Recently Used)
  • 原理:优先淘汰最久未访问的 Key。
  • Redis 实现
    • 近似 LRU:随机采样 5(可配置)个 Key,淘汰其中最久未使用的。
    • 节省内存:每个 Key 记录 24 位访问时间戳(精度为秒级)。
  • 配置
    maxmemory-policy allkeys-lru
    maxmemory-samples 5
    
(2)LFU(Least Frequently Used)
  • 原理:优先淘汰访问频率最低的 Key。
  • Redis 实现
    • 使用 Morris 计数器:24 位存储访问频率(8 位记录计数器,16 位记录衰减时间)。
    • 频率衰减机制:随时间降低计数器值,优先淘汰长期未访问的低频 Key。
  • 配置
    maxmemory-policy allkeys-lfu
    lfu-log-factor 10   # 计数器增长难度
    lfu-decay-time 1    # 计数器衰减时间(分钟)
    
(3)Random(随机淘汰)
  • 原理:随机选择 Key 淘汰。
  • 变种
    • volatile-random:仅淘汰带 TTL 的 Key。
    • allkeys-random:淘汰所有 Key。
(4)TTL(按过期时间淘汰)
  • 原理:优先淘汰 TTL 最小的 Key(即将过期的 Key)。
  • 配置
    maxmemory-policy volatile-ttl
    

三、定时内存淘汰的底层流程

当执行写入命令(如 SET)且内存超限时,触发淘汰流程:

  1. 检查内存使用

    // Redis 源码(evict.c)
    int freeMemoryIfNeeded(void) {size_t mem_used = zmalloc_used_memory();if (mem_used <= server.maxmemory) return C_OK;// 触发淘汰
    }
    
  2. 执行淘汰策略

    • 根据 maxmemory-policy 选择 Key 进行删除。
    • 若为 LRU/LFU,调用 evictionPoolPopulate 采样并填充候选池:
      void evictionPoolPopulate(int dbid, dict *sampledict, dict *keydict, struct evictionPoolEntry *pool) {// 随机采样 Key 并排序
      }
      
  3. 异步删除

    • 使用惰性删除或后台线程(若启用 lazyfree-lazy-eviction)释放内存。

四、总结与对比

机制触发条件核心逻辑性能影响
惰性删除Key 被访问时同步检查并删除过期 Key对单次操作有轻微延迟
定期抽样删除定时任务(默认 10Hz)随机抽样删除过期 Key分散 CPU 消耗
内存淘汰策略内存达到 maxmemory按策略(LRU/LFU/Random/TTL)淘汰可能阻塞主线程

五、配置建议

  1. 优先使用 allkeys-lfu:适用于热点数据场景,精准识别高频访问 Key。
  2. 调整采样数量:增大 maxmemory-samples 提高 LRU/LFU 准确性,但增加 CPU 消耗。
  3. 启用惰性删除
    lazyfree-lazy-eviction yes  # 异步释放内存(减少主线程阻塞)
    

理解这些机制有助于优化 Redis 内存管理,平衡性能与资源利用率。

http://www.dtcms.com/wzjs/368770.html

相关文章:

  • 沧州网站建设代理价格在线培训app
  • 制作企业网站页面多少钱搜索引擎平台排名
  • 楼盘查询快优吧seo优化
  • 做网站销售好做吗国际最新新闻
  • 巩义网站建设哪家专业aso优化方法
  • 网站认证收费吗网站推广技巧和方法
  • 日本做蛋糕网站seo的概念是什么
  • flash做安卓游戏下载网站营销型网站建设需要多少钱
  • 做机械的外贸网站抖音广告推广
  • 织梦可以做导航网站今日大新闻
  • 网站建设对电子商务的作用无线网络优化是做什么的
  • 常用的网站制作软文推广有哪些平台
  • 做一个网站成本大概多少钱竞价排名推广
  • 购物网站补货提醒软件怎么做真正免费的网站建站平
  • 网站备案需要那些资料百度竞价点击软件奔奔
  • 怎么做网站关键字搜索百度账号申诉
  • 成都个人网站制作扬州百度seo公司
  • 给网站做优化刷活跃要收费吗网络营销策划名词解释
  • php语言做的大网站网上商城网站开发
  • 餐饮网站建设的模板百度网盘人工客服电话多少
  • 品牌好的佛山网站建设价格百度法务部联系方式
  • 做网站的任务书百度收录网站需要多久
  • 深圳社区网站开发公司济南网站建设老威
  • 如何做网站进行推广网络营销与传统营销的整合
  • 学风建设网站版块长沙网站seo方法
  • 网络平台开展职业培训网站建设网络推广网站排名
  • 北京 网站代运营新的数据新闻
  • 门户网站如何做性能测试培训网站模板
  • 网站空间大小怎么查看网页设计案例
  • 毕业答辩为什么做网站东莞seo优化方案