redis清除策略

server/2025/1/3 4:19:15/

redis_0">redis清除策略

Redis对于过期键有三种清除策略

  • 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key
  • 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期(默认每100ms)主动淘汰一批已过期的key,这里的一批只是部分过期key,所以可能会出现部分key已经过期但还没有被清理掉的情况,导致内存并没有被释放
  • 当前已用内存超过maxmemory限定时,触发主动清理策略

内存淘汰策略

主动清理策略在Redis 4.0 之前一共实现了 6 种内存淘汰策略,在 4.0 之后,又增加了 2 种策略,总共8种:

  • 针对设置了过期时间的key做处理:

    • volatile-ttl:在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除。
    • volatile-random:就像它的名称一样,在设置了过期时间的键值对中,进行随机删除。
    • volatile-lru:会使用 LRU 算法筛选设置了过期时间的键值对删除。
    • volatile-lfu:会使用 LFU 算法筛选设置了过期时间的键值对删除。
  • 针对所有的key做处理:

    • allkeys-random:从所有键值对中随机选择并删除数据。
    • allkeys-lru:使用 LRU 算法在所有数据中进行筛选删除。
    • allkeys-lfu:使用 LFU 算法在所有数据中进行筛选删除。
  • 不处理:

    • noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息"(error) OOM command not allowed when used memory",此时Redis只响应读操作。

LRU 算法(Least Recently Used,最近最少使用)

淘汰很久没被访问过的数据,以最近一次访问时间作为参考。

LFU 算法(Least Frequently Used,最不经常使用)

淘汰最近一段时间被访问次数最少的数据,以次数作为参考。

当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。这时使用LFU可能更好点。

根据自身业务类型,配置好maxmemory-policy(默认是noeviction),推荐使用volatile-lru。如果不设置最大内存,当 Redis 内存超出物理内存限制时,内存的数据会开始和磁盘产生频繁的交换 (swap),会让 Redis 的性能急剧下降。


http://www.ppmy.cn/server/154682.html

相关文章

【centos8 镜像修改】centos8 镜像修改阿里云

要将 CentOS 8 的镜像源修改为阿里云镜像,你需要编辑 /etc/yum.repos.d/ 目录下的 .repo 文件。以下是具体的步骤: 备份原始的 .repo 文件: 在编辑之前,建议备份原始的 .repo 文件,以便在出现问题时可以恢复。 sudo cp…

游戏引擎学习第61天

回顾并计划接下来的事情 我们现在的目标是通过创建一个占位符版本的游戏来展示我们所做的工作。这个版本的游戏包含了许多基本要素,目的是快速构建一些东西,进行测试,并观察代码结构的形成。这些代码的实施是为了理解系统如何工作&#xff0…

MySQL如何执行.sql 文件:详细教学指南

在使用MySQL数据库过程中,我们经常需要执行包含SQL语句的.sql文件。这些文件通常用于数据库的备份和恢复或批量执行SQL脚本。本文将详细介绍如何在不同环境下执行MySQL的.sql文件。 前置准备 在开始之前,请确保以下条件已经满足: 已经安装…

渗透学习笔记(十一)Burp Suite 总结

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读

上一篇文章学会了stdin任意地址写【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写-CSDN博客 本篇关注stdout利用手法,和上篇提及的手法有着异曲同工之妙 文章目录 前言 一、_IO_2_1_stdout_输出链,及利用思路 (一)_IO_2_1_std…

Servlet中配置和使用过滤器

在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,以下是具体内容: 创建过滤器类 过滤器类需要实现javax.servlet.Filter接口,并重写其中的init、doFilter和destroy方法。 init方法用于过滤器…

使用Windows和FFmpeg 将https://xxx.com/xx.m3u8 推流到B站

要将一个 .m3u8 流推送到 B站(哔哩哔哩直播平台),你可以使用 FFmpeg 工具。下面是一个大致的步骤: 前提条件 你已经拥有 B站的直播推流地址。已经安装并配置了 FFmpeg。 将 FFmpeg 添加到 Windows 环境变量 打开系统环境变量设置: 方法 1&…

查找项目的classes目录路径要使用“classpath:“类路径前缀

查找项目的classes目录路径要使用"classpath:"类路径前缀 使用"classpath:"类路径前缀的好处 使用"classpath:"类路径前缀的好处 查找项目的类文件,包文件或是classes目录下的文件,需要使用相对路径,在指定的路…