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

Redis面试——缓存淘汰和过期删除

一、缓存淘汰策略

  1. 第一种是不淘汰数据(noeviction):当缓存使用满了,有新数据写入请求时,直接拒绝新数据的写入,而不会删除旧数据
  2. 第二种是淘汰过期键(volatile-ttl):优先淘汰剩余过期时间最短的键,即即将过期的键
  3. 第三种是淘汰过期键(volatile-random):从设置了过期时间的键中,随机淘汰可能过期的键
  4. 第四种是淘汰过期键(volatile-lru):从设置了过期时间的键中,淘汰最近最少使用(Less Recently Used ,LRU)的过期键
  5. 第五种是淘汰过期键(volatile-lfu):从设置了过期时间的键中,淘汰最近使用频率最低(Least Frequently Used,LFU)的过期键
  6. 第六种是淘汰所有键(allkeys-random):从所有键中随机淘汰键,不考虑键是否设置了过期时间
  7. 第七种是淘汰所有键(allkeys-lru):从所有键中淘汰最近最少使用(LRU)的键
  8. 第八种是淘汰所有键(allkeys-lfu):从所有键中淘汰最近使用频率最低(LFU)的键

二、过期删除策略

  1. 惰性删除:当客户端执行的命令涉及某个键时,Redis 服务器在执行该命令前,会检查此键是否过期,若已过期则立即删除。该策略的弊端在于,若存在大量长时间未被访问的过期键,会持续占用缓存空间
  2. 定期删除:Redis 服务器通过后台线程执行定期删除任务,每秒轮询 10 次,每次随机抽取 20 个键,删除其中的过期键。若抽取的 20 个键中过期键占比超过 25%,则继续抽取并删除过期键,直至过期键占比低于 25%

三、总结与配置建议

(1)缓存淘汰配置建议

  1. 在缓存场景下,通常选择 “淘汰所有键 — 最近最不常使用的键(allkeys - lru)” 或 “淘汰所有键 — 最近使用频率最低的键(allkeys - lfu)”,优先保存热门键,以保证缓存中存放的是访问频繁的数据,提升缓存命中率
  2. 在会话场景下,通常选择 “淘汰过期键 — 优先淘汰即将过期的键(volatile - ttl)”,因为会话一般都有明确的过期时间,这样可以及时清理过期的会话数据

(2)过期删除配置建议

  1. 调整抽查频率:修改 hz 参数(默认 10,即每秒 10 次检查)
  2. 异步删除:开启 lazyfree - lazy - expire(Redis 4.0+),减少主线程阻塞
http://www.xdnf.cn/news/156.html

相关文章:

  • CSS伪元素
  • Python 之 Faker 测试数据生成
  • uniapp中uni-easyinput 使用@input 不改变绑定的值
  • Linux中的管道
  • EDID结构
  • zookeeper启动报错have small server identifier
  • 3.8/Q1,GBD数据库最新文章解读
  • ApiHug 前端解决方案 - M1 内侧
  • Kafka安全认证技术:SASL/SCRAM-ACL方案详解
  • Ubuntu双保险改时区!北京/上海时区一键切换+手动硬核方案,运维大佬私藏秘籍泄露!
  • vue3 传参 传入变量名
  • chkconfig指令
  • Odoo:免费开源的轧制品行业管理软件
  • 计算机视觉cv2入门之车牌号码识别
  • Webview+Python:用HTML打造跨平台桌面应用的创新方案
  • [密码学实战]基于Python的国密算法与通用密码学工具箱
  • [密码学实战]国密算法面试题解析及应用
  • 苹果紧急修复两个已被利用的iOS漏洞,用于针对特定目标的复杂攻击
  • 基于亚博K210开发板——内存卡读写文件
  • 【AI模型学习】关于写论文——论文的审美
  • 微信小程序的全局变量(quanjubianliang)
  • ubuntu学习day3
  • Hexo+Github+gitee图床零成本搭建自己的专属博客
  • 团体程序设计天梯赛PTA-SHU冲刺赛4. L22-L32
  • .net core 项目快速接入Coze智能体-开箱即用-第2节
  • 【免登录ORACLE,jdk8安装包下载】jdk-8u441-windows-i586.exe和jdk-8u441-windows-x64.exe有什么区别
  • 前端为什么需要单元测试?
  • Python 项目文档编写全攻略:从入门到自动化维护
  • 自注意力机制self-attention
  • 第十二节:原理深挖-React Fiber架构核心思想