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

推荐订阅源

人人都是产品经理
人人都是产品经理
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News
P
Palo Alto Networks Blog
TaoSecurity Blog
TaoSecurity Blog
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
H
Heimdal Security Blog
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 【当耐特】
Webroot Blog
Webroot Blog
小众软件
小众软件
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
PCI Perspectives
PCI Perspectives
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
Cloudbric
Cloudbric
AI
AI
WordPress大学
WordPress大学
博客园 - 聂微东
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
博客园 - Franky
V
V2EX
Schneier on Security
Schneier on Security
G
GRAHAM CLULEY
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
H
Help Net Security
量子位
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recorded Future
Recorded Future
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
C
Cisco Blogs
S
Security Affairs

博客园 - 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  阅读(35)  评论()    收藏  举报

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)