Redis 过期策略和内存淘汰策略

embedded/2024/11/26 22:35:15/

一、过期策略

我们在set key的时候,可以给它设置一个过期时间,比如expire key 60。指定这key60s后过期,60s后,redis是如何处理的?

  1. 定时删除(Active Expiration)
    • 原理:Redis会在后台周期性地检查并删除已过期的键。
    • 实现:Redis的服务器进程会定期(默认每100毫秒)运行一个过期键清理任务。这个任务会随机选择一部分数据库,检查这些数据库中的键是否已过期,如果过期则删除。
    • 优点:可以及时删除过期键,释放内存。
    • 缺点:如果过期键非常多,可能会导致CPU负担加重。
  1. 惰性删除(Lazy Expiration)
    • 原理:当客户端尝试访问一个键时,Redis会检查该键是否已过期,如果已过期则删除该键。
    • 实现:每次访问键时,Redis都会检查该键的过期时间。如果键已过期,则删除该键并返回相应的错误信息。
    • 优点:不会在后台占用额外的CPU资源。
    • 缺点:过期键可能在一段时间内仍然占用内存,直到被访问时才会被删除。

Redis实际上结合了定时删除和惰性删除两种策略,以达到最佳的性能和资源利用率。具体来说:

  • 定时删除:定期检查并删除过期键,确保大部分过期键能够及时被清理。
  • 惰性删除:在客户端访问键时,检查并删除过期键,确保不会出现访问到已过期键的情况。

二、内存淘汰策略

当Redis的内存使用达到配置的最大限制时,Redis会根据配置的内存淘汰策略来决定如何释放内存。内存淘汰策略的目的是在内存不足时,尽量保留重要的数据,避免系统崩溃。

  1. noeviction(默认策略)
    • 描述:当内存使用达到上限时,新的写入操作会被拒绝,返回错误信息。
    • 适用场景:适用于不允许数据丢失的场景。
  1. allkeys-lru
    • 描述:当内存使用达到上限时,优先删除最近最少使用的键(Least Recently Used, LRU)。
    • 适用场景:适用于缓存场景,希望保留最近经常访问的数据。
  1. volatile-lru
    • 描述:当内存使用达到上限时,优先删除设置了过期时间的键中最近最少使用的键。
    • 适用场景:适用于缓存场景,且希望优先保留未设置过期时间的数据。
  1. allkeys-lfu
    • 描述:当内存使用达到上限时,优先删除最近最少频繁使用的键(Least Frequently Used, LFU)。
    • 适用场景:适用于缓存场景,希望保留最近频繁访问的数据。
  1. volatile-lfu
    • 描述:当内存使用达到上限时,优先删除设置了过期时间的键中最近最少频繁使用的键。
    • 适用场景:适用于缓存场景,且希望优先保留未设置过期时间的数据。
  1. allkeys-random
    • 描述:当内存使用达到上限时,随机删除键。
    • 适用场景:适用于对数据一致性要求不高的场景。
  1. volatile-random
    • 描述:当内存使用达到上限时,随机删除设置了过期时间的键。
    • 适用场景:适用于对数据一致性要求不高的场景,且希望优先保留未设置过期时间的数据。
  1. volatile-ttl
    • 描述:当内存使用达到上限时,优先删除设置了过期时间且过期时间最近的键。
    • 适用场景:适用于缓存场景,希望尽快释放即将过期的数据。

这里只要记住默认的策略和最近最少使用和最少频率使用和随机删除即可,无非就是所有key和设置了过期时间的可以的区别

三、总结

  • 过期策略:Redis通过定时删除和惰性删除相结合的方式来处理过期键,确保数据的时效性,同时尽量减少对性能的影响。
  • 内存淘汰策略:当内存使用达到上限时,Redis会根据配置的策略来释放内存,确保系统的稳定运行。常见的策略包括LRU、LFU、随机删除等,适用于不同的应用场景。

通过合理配置这些策略,可以有效地管理和优化Redis的内存使用,确保系统的高性能和稳定性。


http://www.ppmy.cn/embedded/140743.html

相关文章

信创改造 - TongRDS 替换 Redis

记得开放 6379 端口哦 1)首先在服务器上安装好 TongRDS 2)替换 redis 的 host,post,passwd 3)TongRDS 兼容 jedis # 例如:更改原先 redis 中对应的 host,post,passwd 改成 TongRDS…

SAP SD学习笔记14 - 返品处理(退货处理)的流程以及系统实操,比如 返品传票;请求Block标记;收到退货之后的处理,请求传票的登录

上一章讲了 出库确认(发货)之后的取消。 SAP SD学习笔记13 - 出库确认(发货)之后的取消 - VL09_sap 销售出库取消-CSDN博客 本章继续讲SD模块中返品(退货)的流程以及系统操作。 比如 - 返品传票&#xf…

第02章_MySQL环境搭建(基础)

1. MySQL 的卸载 1.1 步骤1:停止 MySQL 服务 在卸载之前,先停止 MySQL8.0 的服务。按键盘上的 “Ctrl Alt Delete” 组合键,打开“任务管理器”对话 框,可以在“服务”列表找到“MySQL8.0” 的服务,如果现在“正在…

RNN与LSTM,通过Tensorflow在手写体识别上实战

简介:本文从RNN与LSTM的原理讲起,在手写体识别上进行代码实战。同时列举了优化思路与优化结果,都是基于Tensorflow1.14.0的环境下,希望能给您的神经网络学习带来一定的帮助。如果您觉得我讲的还行,希望可以得到您的点赞…

迈向AI驱动的数据新时代:探索SQL Server 2025的全新向量数据库

随着科技的飞速发展,数据已成为推动各行各业进步的重要动力。而在这个数据爆炸的时代,如何高效地存储、检索和分析数据,成为了摆在我们面前的一大挑战。幸运的是,微软SQL Server 2025的推出,为我们带来了全新的向量数据…

openssl创建自签名证书

原文地址:自签名证书 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 1 生成私钥 openssl genrsa -out server.key 2048 2 创建证书请求文件 openssl req -new -key server.key -out server.csr 3 用私钥和证书请求文件&#xf…

嵌入式开发工程师面试题 - 2024/11/24

原文嵌入式开发工程师面试题 - 2024/11/24 转载请注明来源 1.若有以下定义语句double a[8],*pa;int i5;对数组元素错误的引用是? A *a B a[5] C *(p1) D p[8] 解析: 在 C 或 C 语言中&am…

单片机结合OpenCV

目录 一、引言 二、单片机结合 OpenCV 的优势 1. 图像识别与处理 2. 目标检测 3. 用户界面开发 4. Linux 在嵌入式系统中的作用 5. 多线程优势 6. 网络编程作用 7. 文件编程功能 三、OpenCV 在单片机上的实现难点 1. 处理能力限制 2. 通信与优化挑战 四、单片机如…