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

Redis过期策略与内存淘汰机制面试笔记

Redis过期策略

Redis采用惰性删除定期删除相结合的策略来处理过期键。

惰性删除(Lazy Expiration)

当访问某个键时才检查是否过期,如果过期则删除并返回空值。

优点:CPU友好,只在访问时检查,避免无效检查
缺点:内存不友好,过期但未访问的键会一直占用内存

定期删除(Active Expiration)

Redis定期扫描数据库,随机选择一定数量的键进行过期检查并删除。

执行模式

  • SLOW模式:定时任务,默认10Hz频率,每次最多25ms
  • FAST模式:频率不固定,间隔不低于2ms,每次不超过1ms

优点:通过限制执行时长和频率平衡CPU开销,有效释放过期键内存
缺点:难以确定最优的执行时长和频率

内存淘汰策略

当Redis内存不足时,会根据配置的淘汰策略删除数据为新数据腾出空间。

淘汰策略分类

针对所有键

  • allkeys-lru:基于LRU算法淘汰最近最少使用的键
  • allkeys-lfu:基于LFU算法淘汰最少使用频率的键
  • allkeys-random:随机淘汰键

针对设置TTL的键

  • volatile-lru:对有TTL的键使用LRU算法淘汰
  • volatile-lfu:对有TTL的键使用LFU算法淘汰
  • volatile-ttl:优先淘汰TTL值较小的键
  • volatile-random:随机淘汰有TTL的键

不淘汰

  • noeviction:不淘汰任何键,内存满时拒绝写入(默认策略)

算法补充

LRU(Least Recently Used):淘汰最近最少使用的数据,适合时间局部性强的场景

LFU(Least Frequently Used):淘汰使用频率最低的数据,适合访问模式相对固定的场景

常见面试问题及答案

Q1:数据库有1000万数据,Redis只能缓存20万数据,如何保证Redis中都是热点数据?

答案:使用allkeys-lru淘汰策略。该策略会淘汰最近最少使用的键,保留经常访问的热点数据,确保缓存的有效性。

Q2:Redis内存用完了会发生什么?

答案:取决于配置的淘汰策略:

  • 如果是默认的noeviction策略,会直接返回错误,拒绝写入操作
  • 如果配置了其他淘汰策略,会按照相应规则删除数据后允许写入

Q3:如何选择合适的淘汰策略?

答案

  • 对于缓存场景,推荐allkeys-lru,确保热点数据留存
  • 如果业务明确区分了临时数据和永久数据,可选择volatile-lru
  • 对于访问模式稳定的场景,可考虑allkeys-lfu
  • 生产环境避免使用noeviction,除非有特殊需求

总结

Redis的过期和淘汰机制是其内存管理的核心特性。过期策略确保及时清理过期数据,淘汰策略在内存不足时保证服务可用性。理解这些机制有助于合理配置Redis参数,优化缓存性能。

http://www.dtcms.com/a/275957.html

相关文章:

  • 数据库连接池及其核心特点
  • AI编程下的需求规格文档的问题及新规范
  • ADSP-1802这颗ADI的最新DSP应该怎么做开发(一)
  • 【Redis实战】Widnows本地模拟Redis集群的2种方法
  • Syntax Error: TypeError: Cannot set properties of undefined (setting ‘parent‘)
  • Unity URP + XR 自定义 Skybox 在真机变黑问题全解析与解决方案(支持 Pico、Quest 等一体机)
  • Cookie、Session、Token 有什么区别?
  • Spring Boot 中使用 Lombok 进行依赖注入的示例
  • 【离线数仓项目】——电商域DWD层开发实战
  • 【C++ STL 库】解析stack、queue、priority_queue类
  • 中文多智能体金融交易决策框架-TradingAgents-CN
  • 本地安装ClaudeCode全攻略
  • 【Python】多线程详解:从基础概念到实战应用
  • 免费尝试claude code的安利,截至今天可用(7/12)
  • openGauss数据库管理实战指南——基本常用操作总结
  • AI:机器人未来的形态是什么?
  • Cisco ACI 生成Postman CSV 脚本场景
  • 死锁的避免
  • Spring Boot 应用中,配置的加载优先级
  • 锁相环初探
  • CTFHub————Web{信息泄露[Git泄露(Stash、Index)]}
  • Java 接口详解:从基础到高级,掌握面向对象设计的核心契约
  • 使用FastAdmin框架开发二
  • ollama - sqlcoder模型:面向提示词编程(根据用户信息生成sql语句并执行返回结果)
  • SQL新手入门详细教程和应用实例
  • 微信小程序121~130
  • [Vroom] 时间窗口 | 载重与货量管控 | 内部路由表示机制 | 增量式更新算法O(1)
  • 【Redis-05】高可用方案-主从哨兵
  • 【PTA数据结构 | C语言版】用两个栈实现队列
  • 监控28181连接到云服务器/推流分发/客户端网页端手机端拉流/实时性好极低延迟