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

Redis的过期策略及其优缺点

Redis 的过期策略是指 Redis 如何处理设置了过期时间的键值对。Redis主要有两种过期策略:惰性删除、定期删除,以及一种辅助机制内存淘汰策略。

惰性删除(被动删除)
原理:惰性删除是Redis最简单的过期策略,也是默认的过期。当客户端尝试访问一个已过期的键时,Redis会检查该键是否已过期,如果已过期,则立即删除该键,并返回空值。

优点
按需清理,减少CPU开销:只有在访问过期键时才会触发删除操作,减少了不必要的删除开销。在高并发场景下,这种按需清理的方式可以避免因频繁扫描过期键而导致的CPU资源浪费。

缺点

  • 内存泄漏问题:如果大量过期键在被访问之前一直未被访问,这些键会一直占用内存空间,可能导致内存泄漏问题。
  • 突发访问压力:当大量过期键同时被访问时,可能会导致瞬间的高负载,影响系统性能。

适用场景:适用于对内存占用要求不高,且过期键访问频率较高的场景。

定期删除(主动删除)
原理:Redis会定期检查并删除已过期的键。每次检查会随机选择一定数量的键进行过期检查和删除。具体流程如下:

  • 随机抽样:从每个数据库中随机选取一定数量的键(默认每次检查20个键)。

  • 删除判断:若超过25%的抽样键已过期,则重复抽样和删除过程,直至比例低于25%或达到时间限制。

  • 频率控制:通过配置hz参数调整每秒执行的定期任务次数(默认10次/秒),平衡CPU和内存效率。

  • hz 10 # 默认值,可调整为 1~500(通常不超过 100)

优点:
及时释放内存:通过定期检查,能够及时删除过期键,释放内存空间,避免内存被无用数据占用,也避免了集中式的扫描带来的性能问题。

缺点

  • 内存占用波动:由于定期删除的频率和数量有限,可能会导致内存占用在某些时刻较高,尤其是在过期键较多时。
  • CPU资源占用:定期检查和删除操作会占用一定的CPU资源,尤其是在过期键较多的情况下。

适用场景:适用于对内存占用有一定要求,且需要及时释放过期键内存的场景。

内存淘汰策略(辅助机制)
原理:当内存达到maxmemory限制时,Redis会根据配置的淘汰策略删除键,即使部分键未过期。定期淘汰策略可以根据不同的内存淘汰算法进行配置,常见的有:

maxmemory 4gb           # 设置 Redis 最大内存限制(如 4GB:maxmemory 4gb)
maxmemory-policy volatile-ttl  # 常用策略:优先删除 TTL 短的键
  • volatile-ttl:优先删除剩余存活时间(TTL)最短的键。
  • volatile-lru:在设置过期时间的键中,删除最近最少使用的(LRU)。
  • volatile-lfu:在设置过期时间的键中,删除最不经常使用的(LFU)。
  • allkeys-lru/allkeys-lfu:从所有键中按LRU/LFU淘汰。
  • volatile-random/allkeys-random:随机删除键。
  • noeviction(默认):拒绝写入新数据,直到释放足够内存。

优点

  • 主动管理内存:通过主动淘汰未过期但占用较多内存的键,能够更有效地管理内存,避免内存不足导致的问题。
  • 灵活性高:可以根据不同的业务需求选择合适的淘汰算法,灵活配置内存管理策略。

缺点

  • 复杂度高:实现机制较为复杂,需要配置和管理不同的淘汰算法。
  • 数据丢失风险:可能会导致一些未过期但重要的键被误淘汰,需要谨慎配置。

适用场景:适用于内存资源有限,且需要主动管理内存的场景,例如在高并发、大数据量的分布式系统中。

相关文章:

  • FPGA之硬件设计笔记-持续更新中
  • python-leetcode-颜色分类
  • 安全模块设计:token服务、校验注解(开启token校验、开启签名校验、允许处理API日志)、获取当前用户信息的辅助类
  • 模拟进程通过系统调用向缓冲区写入并刷新的过程
  • k8s之pod的调度之污点与容忍污点,什么是污点? 如何容忍污点
  • 校园二手交易微信小程序的设计与实现(论文源码调试讲解)
  • 在鸿蒙HarmonyOS手机上安装hap应用
  • 深度学习基础--ResNet50V2网络的讲解,ResNet50V2的复现(pytorch)以及用复现的ResNet50做鸟类图像分类
  • 【北京迅为】iTOP-RK3568OpenHarmony系统南向驱动开发-第1章 GPIO基础知识
  • 线程概述以及Java中线程的三种创建方式(继承Thread类、实现Runnable接口、实现Callable接口)
  • 鸿蒙 ArkUI 实现 2048 小游戏
  • 网络安全 越权分为几种
  • Centos7源码编译安装Sqlite最新版本
  • 算法-二叉树篇14-从中序与后序遍历序列构造二叉树
  • 深度解析 ANSI X9.31 TR-31:金融行业密钥管理核心标准20250228
  • 如何有效判断与排查Java GC问题
  • Spring 源码硬核解析系列专题(十):Spring Data JPA 的 ORM 源码解析
  • 【Spring】AOP
  • PMP项目管理—范围管理篇—6.控制范围
  • 轻松微调大模型:利用 Colab 和 Unsloth 实现高效训练
  • 做行业网站广告能赚多少钱/seo外包方案
  • 高淳建设局网站/百度优化培训
  • 代刷网站只做软件吗/网站优化名词解释
  • python做软件的网站/seo优化排名怎么做
  • 网站建设评语/深圳将进一步优化防控措施
  • 网站怎么做seo优化啊/百度链接地址