中间件专栏之Redis篇——Redis中过期key删除和内存淘汰策略

在Redis中,过期键的删除内存淘汰策略是管理Redis内存的重要机制,确保Redis可以高效地使用内存,并避免由于内存不足导致的性能问题。以下是这两个概念的详细介绍:

一、过期键删除机制

Redis支持对存储的键设置过期时间(TTL, Time to Live),过期时间到达后,Redis会自动删除这些键。Redis对过期键的删除机制并不是严格的"实时"删除,而是采用了一些优化策略。

1. 过期键的删除方式

Redis中,过期键删除的方式分为两种:

  • 定期删除:Redis每隔一定时间会随机检查一部分带有过期时间的键,并删除那些已经过期的键。默认情况下,每100毫秒会进行一次检查。

  • 惰性删除:每次访问某个键时,如果发现该键已过期,Redis会在访问时删除这个键。这意味着过期的键不会立即删除,直到被访问时才会删除。

这两种方式的结合保证了Redis能够在保证性能的同时,避免内存占用过多的过期键。

2. 过期键的删除策略
  • 惰性删除:即键在被访问时,如果发现其过期,则立即删除。虽然这种方法简单,但如果没有被访问到的过期键仍然占用内存,可能会导致内存浪费。

  • 定期删除:Redis每隔一定时间会扫描一定比例的过期键并删除,这可以有效防止过期键占用内存,但也有一定的性能开销。

3. 过期策略的缺点
  • 延迟删除:由于过期键是在访问时被删除的,如果某个过期键长时间没有被访问到,它会一直占用内存,直到它被随机扫描到。
  • 性能开销:定期删除机制会消耗CPU和内存资源,尤其在大规模数据集和高并发环境下。

二、内存淘汰策略

Redis采用内存淘汰策略来管理内存使用,确保Redis在内存使用达到限制时不会出现崩溃。Redis提供了多种内存淘汰策略,这些策略决定了在内存不足时,Redis会如何选择和删除数据。

1. 内存淘汰策略类型

在Redis配置中,maxmemory-policy设置了内存淘汰的策略,当Redis的内存使用超过了maxmemory配置指定的限制时,会根据选择的策略决定如何处理内存:

  • noeviction (默认):当内存达到限制时,Redis会拒绝所有写入请求,并返回一个错误提示(OOM command not allowed when used memory > 'maxmemory')。这意味着在内存不足时,Redis会拒绝写入操作,而不会自动删除数据。

  • allkeys-lru:Redis会从所有键中删除最少使用的键(LRU,Least Recently Used)。LRU算法会选择最近最少使用的键进行删除。

  • volatile-lru:只从设置了过期时间的键中删除最少使用的键。如果某个键已经过期并且被选中进行删除,则删除该键。

  • allkeys-random:从所有键中随机删除一些键。

  • volatile-random:只从设置了过期时间的键中随机删除一些键。

  • volatile-ttl:只从设置了过期时间的键中,删除那些剩余时间最短的键(TTL,Time to Live)。

  • allkeys-lfu(Redis 4.0+):Redis会从所有键中删除最不常使用的键。LFU(Least Frequently Used)算法会选择那些使用频率最低的键进行删除。

  • volatile-lfu(Redis 4.0+):只从设置了过期时间的键中删除最不常使用的键。

2. 内存淘汰策略的选择

不同的内存淘汰策略适用于不同的使用场景,下面是一些常见策略的适用情况:

  • noeviction:适用于对数据的完整性有很高要求的场景,在这种场景下,Redis会拒绝写入操作,直到有足够的内存为止,避免丢失数据。

  • allkeys-lru:适用于希望缓存数据可以被替换的场景。LRU算法能够较好地保证常用数据的保留,淘汰不常用的数据。

  • volatile-lru:适用于希望对过期数据进行管理的场景,确保只有那些设置了过期时间的数据被淘汰。

  • allkeys-random:适用于需要简单且不需要考虑过期的场景,或者数据集较小且内存不紧张的场景。

  • volatile-ttl:适用于希望淘汰即将过期的数据的场景,例如会话管理中,接近过期的会话优先被清除。

  • allkeys-lfu:适用于缓存热点数据的场景,LFU算法能够根据数据的访问频率来选择需要淘汰的数据,避免热门数据被删除。

总结

  • 过期键删除:Redis通过惰性删除和定期删除相结合的方式来管理过期键。惰性删除在键被访问时删除过期键,而定期删除则定期扫描并删除过期的键。这些方法虽然能够有效减少内存的浪费,但仍可能导致延迟删除和性能开销。

  • 内存淘汰策略:Redis提供多种内存淘汰策略,在内存达到配置限制时,Redis根据不同的策略删除键,以释放内存。用户可以根据业务需求选择合适的策略,如LRU、LFU等。

相关推荐
CNSSIRD数据库36 分钟前
中国企业环境信用数据库2003-2026
大数据·数据库·数据分析·论文笔记
fd32001 小时前
达梦数据库更新统计信息后仍走旧执行计划解决方案
数据库
华章酱2 小时前
MySQL幻读是怎么出现的
数据库·mysql·幻读
浅念-2 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
updayday8542 小时前
离职域账号状态变更与Ping64操作记录核对
大数据·网络·数据库·安全·智能路由器
Nturmoils3 小时前
只恢复一张表,别把整个库都还回去
数据库
张某布响丸辣3 小时前
附件下载的安全边界:路径白名单、NAS 哨兵文件与 Redis Lua 一次性令牌
java·redis·redis lua·nas哨兵
龙腾AI白云3 小时前
大语言模型:从语言理解到通用智能的跃迁
数据库·人工智能·机器学习·知识图谱
SelectDB4 小时前
快手基于 Apache Doris 千亿多模态检索的实践
大数据·数据库·数据分析
SelectDB4 小时前
StarRocks 迁移至 Apache Doris 完整指南:三步完成结构、数据与业务平滑切换
大数据·数据库·数据分析