惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - abce

Redis 如何通过槽优化分布式系统中的键值存储 Redis 集群架构 Redis 的演进之路:从缓存到 AI 数据库(V1.0至8.4) Redis 的 aof-use-rdb-preamble 及其工作原理 MySQL主从之间具有不同数据类型的列的复制 MySQL 如何存储临时文件 理解mysql中的 local_infile 变量 pbm 还原物理备份提示executable file not found in $PATH. stderr MySQL 日志报错:Got packets out of order MySQL 8.0 已废弃的功能 sqlserver 删除job失败 查看 percona server for mongodb 的版本 MySQL 8 的哈希连接 MySQL 8.0 克隆插件及其原理 有效管理 MongoDB 日志和系统资源 MySQL 保留字需要了解的内容 MongoDB 数据碎片处理 MongoDB 8.0 的复制 min_examined_row_limit 对慢查询日志的影响
Redis 缓存过期和删除策略
abce · 2026-01-22 · via 博客园 - abce

2026-01-22 10:07  abce  阅读(23)  评论()    收藏  举报

Redis 实现了多种过期删除策略,用来高效管理内存并确保最佳性能。理解这些机制对于构建可扩展的高性能应用至关重要。

Redis采用懒惰删除与主动删除策略的组合方案。它不会立即删除过期键,而是运用智能算法在性能与内存使用之间取得平衡。

过期删除的核心策略

1.惰性删除(Lazy Deletion)

惰性删除是主要机制,过期键仅在被访问时才会被移除。当客户端尝试访问键时,Redis会检查该键是否已过期,若已过期,则立即删除该键并返回NULL;不会进行后台扫描或主动删除。

惰性删除的优点:

·CPU开销极低

·无需后台处理

·适用于高频访问的键值

惰性删除的缺点:

·过期键值若永不被访问将造成内存浪费

·内存使用模式难以预测

2.主动删除(Active Deletion)

Redis定期扫描并清除过期键值以防止内存膨胀。Redis内部维护一个定时任务,默认每秒运行10次(通过配置hz控制)​。定时任务中删除过期键逻辑采用了自适应算法,根据键的过期比例、使用快慢两种速率模式回收键。

算法实现细节:

·Redis每秒运行约10次过期检测循环

·每次循环从过期字典中随机抽取20个键值对

·若过期键值占比超25%,则重复执行上面的流程

·单次循环执行时间受限,以避免阻塞

image (2)

配置

# Redis configuration for active expiration
hz 10                    # Frequency of background tasks (10 Hz = 10 times/second)
active-expire-effort 1   # CPU effort for active expiration (1-10)

Redis 过期策略(驱逐策略)

当 Redis 达到内存限制时,会采用驱逐策略来释放空间:

# Configuration in redis.conf
maxmemory 2gb
maxmemory-policy allkeys-lru

1.策略类型

(1)noeviction(默认)

·不驱逐任何键

·内存达到上限时写入操作返回错误

·适用场景:不可丢失的关键数据

(2)allkeys-lru

·从所有键中移除最近最少使用的键

·适用场景:通用缓存场景

(3)allkeys-lfu

·移除访问频率最低的键

·适用场景:具有独特访问模式的应用程序

(4)volatile-lru

仅从设置了过期时间的键中移除最近最少使用键

适用场景:持久数据与临时数据混合存储

易失性-最近最少使用

(5)volatile-lfu

仅从设置了过期时间的键中移除访问频率最低的键

(6)allkeys-random

·随机移除键

适用场景:访问模式不可预测时

(7)volatile-random

随机移除设置了过期时间的键

(8)volatile-ttl

优先移除生存时间(TTL)最短的键

适用场景:时间敏感数据优先级处理

2.策略选择指导

image (3)

主从集群过期机制

在Redis集群中,过期处理遵循特定模式。

主从过期流程:

·仅主节点执行主动过期循环

·主节点向从节点发送显式DEL命令

·从节点不独立执行键过期(惰性删除机制除外)

image (4)