讲师中心 微信公众号
AI工具推荐 视频效率加速

Redis怎样处理淘汰策略引起的响应延迟_升级Redis6并开启lazyfree异步删除

落枫大大_8036

落枫大大_8036

发布时间:2026-04-11 08:17:04

|

314人浏览过

|

来源于php中文网

原创

开启 lazyfree-lazy-eviction yes 且 Redis ≥ 6.0 后,淘汰策略触发的内存释放由后台线程异步执行,主线程不再被同步释放大 Key 卡住。

redis怎样处理淘汰策略引起的响应延迟_升级redis6并开启lazyfree异步删除

淘汰策略触发的响应延迟,本质是主线程在同步释放大 Key 内存时被卡住。只要 Redis 版本 ≥ 6.0 且正确开启对应 lazyfree 配置,就能把这部分释放工作移交后台线程,主线程几乎不感知。

为什么 maxmemory 淘汰会卡住主线程

当 maxmemory 达到上限、Redis 根据 maxmemory-policy(如 allkeys-lru)开始驱逐 Key 时,它默认走的是同步释放路径:找到一个待淘汰的 Key → 读取其 value → 递归释放所有底层结构(比如一个百万元素的 zset 的跳表节点)→ 才返回。这个过程全程阻塞主线程,QPS 断崖下跌、P99 延迟飙升是常态。

这不是配置错的问题,而是 Redis 6.0 之前的设计限制。哪怕你用的是 volatile-lfu,只要没开 lazyfree,照样卡。

lazyfree-lazy-eviction 必须显式开启

Redis 默认关闭所有 lazyfree 场景,包括淘汰驱逐。必须在 redis.conf 中设置:

lazyfree-lazy-eviction yes

注意:lazyfree-lazy-eviction 控制的是「内存不足触发的驱逐删除」是否异步释放内存,和 lazyfree-lazy-expire(过期键)、lazyfree-lazy-user-del(DEL/UNLINK)互不影响,各自独立开关。

常见误操作:

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • 只开了 lazyfree-lazy-user-del,以为“删得快”就覆盖了淘汰场景 —— 实际无效
  • 配置写成 lazyfree-eviction yes(漏掉 -lazy-)—— Redis 启动时静默忽略该行
  • 改完配置没重启实例,或没 CONFIG REWRITE + CONFIG RELOAD —— 配置未生效

UNLINK 替代 DEL 并不能解决淘汰卡顿

UNLINK 是用户主动删除的 lazyfree 入口,它对淘汰场景完全无影响。淘汰由 Redis 内部自动触发,走的是 evictKeysRandom 或 evictLruKeys 等函数路径,和客户端发什么命令无关。

所以别指望用 UNLINK 缓解淘汰压力。真正起作用的只有:lazyfree-lazy-eviction yes + Redis ≥ 6.0。

验证是否生效的方法:

  • 观察 INFO MEMORY 输出中的 lazyfree_pending_objects,淘汰发生后该值应短暂上升再归零
  • 用 redis-cli --stat 监控 evicted_keys 上升期间的 instantaneous_ops_per_sec 是否稳定
  • 在淘汰高峰期抓取 redis-server 进程栈:gstack $(pidof redis-server),主线程不应长时间停留在 freeObj 或 dictRelease 调用栈中

异步释放不是免费的,内存回收有滞后性

开启 lazyfree-lazy-eviction 后,被淘汰 Key 的内存不会立刻归还给操作系统,而是由 BIO 线程逐步释放。这意味着:

  • INFO MEMORY 中的 used_memory 下降变慢,可能比实际淘汰时间晚几百毫秒到几秒
  • 如果淘汰速率持续高于 BIO 线程处理能力(比如每秒淘汰 100 个 50MB 的 Hash),lazyfree_pending_objects 会持续堆积,最终可能触发 OOM killer
  • BIO 线程数默认为 1,高负载下可考虑调大 io-threads(但仅对 AOF rewrite 和 RDB save 有效;lazyfree 使用的是独立的 BIO_LAZY_FREE 队列,不受 io-threads 控制)

最易被忽略的一点:lazyfree 不改变淘汰决策逻辑,只改变释放时机。如果你的 maxmemory-policy 本身就不合理(比如用了 noeviction 却硬塞数据),再怎么开异步也救不了。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
c++中volatile关键字的作用
c++中volatile关键字的作用

本专题整合了c++中volatile关键字的相关内容,阅读专题下面的文章了解更多详细内容。

714

2025.10.23

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5147

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2288

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5147

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2288

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

3818

2023.08.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4309

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3795

2023.11.14

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn