2023-07-01:redis过期策略都有哪些?LRU 算法知道吗?

news2024/11/15 20:11:39

2023-07-01:redis过期策略都有哪些?LRU 算法知道吗?

答案2023-07-01:

缓存淘汰算法(过期策略)

当Redis的内存超出物理内存限制时,内存中的数据就会频繁地与磁盘进行交换,这个过程叫做交换(swap)。由于交换的高开销,Redis的性能会急剧下降。对于访问频率较高的Redis实例来说,这样低效的存取效率几乎等同于不可用。

maxmemory

在生产环境中,我们严禁Redis发生交换行为。为了限制Redis的最大内存使用量,Redis提供了一个配置参数maxmemory,用于设置期望的最大内存大小。

当实际内存超出maxmemory限制时,Redis提供了几种可选策略(maxmemory-policy),供用户自行选择如何释放空间以便继续提供读写服务。

image.png

image.png

  • noeviction: 这种策略不会继续为写请求提供服务(DEL请求可以继续提供服务),但读请求可以继续进行。这保证不会丢失数据,但会导致在线业务无法持续进行。这是默认的淘汰策略。

  • volatile-lru: 该策略尝试淘汰设置了过期时间的键,优先淘汰最近最少使用的键。没有设置过期时间的键不会被淘汰,以确保持久化数据不会突然丢失。

  • volatile-ttl: 与前面的策略相似,但淘汰的依据是键的剩余生存时间(TTL)值,TTL越小的键优先被淘汰。

  • volatile-random: 与前面的策略类似,但是淘汰过期键集合中的键时是随机的。

  • allkeys-lru: 与volatile-lru不同,该策略淘汰的是整个键集合,而不仅限于过期键集合。这意味着没有设置过期时间的键也会被淘汰。

  • allkeys-random: 与前面的策略类似,但淘汰的键是整个键集合中的随机键。

策略中的"volatile-xxx"仅针对带有过期时间的键进行淘汰,而"allkeys-xxx"策略会对所有键进行淘汰。如果您只是将Redis用作缓存,应该使用"allkeys-xxx"策略,客户端在写入缓存时不需要提供过期时间。如果您还希望同时使用Redis的持久化功能,则应使用"volatile-xxx"策略,这样可以保留未设置过期时间的键,它们将被视为永久键而不会被LRU算法淘汰。

LRU 算法

LRU算法的实现通常涉及两个数据结构:字典和链表。字典用于以键值对的形式存储数据,而链表用于维护键的访问顺序。链表中的元素按照最近访问的时间顺序排列,最近访问的元素位于链表的头部,而不常使用的元素位于尾部。当缓存空间已满时,将会踢掉链表尾部的元素。

链表尾部的元素是不被频繁访问的,因此在空间满时会被移除。而链表头部的元素是最近被访问过的,暂时不会被移除。

image.png

近似 LRU 算法

Redis使用的是近似LRU算法,与LRU算法有一些不同。由于LRU算法需要消耗大量的额外内存并需要对数据结构进行较大改造,所以Redis选择使用近似LRU算法。

近似LRU算法在现有数据结构的基础上采用了随机采样法来淘汰元素,能够达到非常接近LRU算法的效果。为了实现近似LRU算法,Redis为每个键增加了一个额外的小字段,该字段的长度为24个比特,表示最后一次访问该键的时间戳。

当Redis执行写操作时,如果发现内存超出maxmemory限制,它会执行一次LRU淘汰算法。该算法非常简单:随机选择5个键(可配置为maxmemory-samples数),然后淘汰最旧的键。如果淘汰后仍然超出maxmemory,Redis将继续随机采样淘汰,直到内存低于maxmemory为止。

image.png

maxmemory-policy的配置决定了采样的方式。若为"allkeys",则从所有键的字典中进行随机采样;若为"volatile",则从带有过期时间的键字典中随机采样。每次采样的键数量由maxmemory-samples配置确定,默认为5。

采样数量越大,近似LRU算法的效果越接近严格的LRU算法。

此外,Redis 3.0引入了淘汰池的概念,新的算法会维护一个候选池(大小为16)。池中的数据按访问时间排序,首次随机选取的键将放入池中。随后的每次随机选取只有在访问时间小于池中最小时间时,才会放入池中,直到池满为止。当池满时,如果有新的键需要放入,将移除最后访问时间最大(最近被访问)的键。这进一步提升了近似LRU算法的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/708033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树的练习

文章目录 单值二叉树检查两颗树是否相同对称二叉树二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历另一颗树的子树通过前序遍历的数组构建二叉树判断二叉树是否是完全二叉树层序遍历k层节点数二叉树的销毁二叉树的整体 单值二叉树 单值二叉树,可以使用等式的传递…

Java基础---有了基本类型为什么还需要包装类

目录 缘由 基本类型和包装类型的区别 如何理解自动拆装箱 哪些地方会自动拆装箱 自动拆装箱与缓存 缘由 Java中有8种基本数据类型,这些基本类型又都有对应的包装类 因为Java是一种面向对象语言,很多地方都需要使用对象而不是基本数据类型比如&…

Domino Admin管理客户机中为每个管理域设置不同的图标

大家好,才是真的好。 一直在讲Domino管理中的单个网络 域,很少讲到多个Domino网络域的管理。其实,很多企业会有多个Domino网络域。因为以前多个部门或组织、企业等合并,或者隔离国内和国外的目录隔开等等,都会产生多个…

从0-1手写一个RPC框架

前言 什么是RPC RPC(Remote Procedure Call)远程过程调用,简言之就是像调用本地方法一样调用远程服务。目前外界使用较多的有gRPC、Dubbo、Spring Cloud等。相信大家对RPC的概念都已经很熟悉了,这里不做过多介绍。 为啥要自己写…

nvm 和 nrm安装使用

前端工具推荐:nvm(Node 版本管理工具) 和 nrm(管理npm源): 一、nvm 1.1 nvm 是什么 1.2 安装 nvm 1.3 使用 nvm 二、nrm 2.1 nrm 是什么 2.2 安装 nrm 2.3 使用 nrm 一、nvm 如果直接将 node 安装到…

20230701:成电的“七年之痒”,毕业啦

毕业那些事儿 毕业随笔写在最后 毕业随笔 伴随着走完最后一道流程,成电7年,总算是毕业了。经济下行,行业寒冬,全被90后赶上了,庆幸学校的金字招牌让自己斩获了不少OFFER。荒废了半年的跑步和博客计划,接下…

【测试开发】概念基础

目录 一. 需求 1. 用户需求 2. 软件需求 3. 从测试人员的角度看需求 二. 测试用例 三. BUG 四. 开发模型 1. 软件的生命周期 2. 开发模型 2.1 瀑布模型 2.2 螺旋模型 2.3 增量,迭代模型 2.4 敏捷模型 SCRUM 五. 测试模型 1. V模型 2. W模型 (双V模…

开源免费的多数据库工具Chat2DB

Chat2DB使用 当前使用的版本为1.0.11。 一.Chat2DB介绍 Chat2DB 是一款开源免费的多数据库客户端工具。 能够将自然语言转换为SQL,也可以将SQL转换为自然语言。 支持windows、mac本地安装,也支持服务器端部署,web网页访问。 支持多种数据库…

Hexo基本建站

目录 一、前言 二、Hexo安装、新建、启动 三、架构说明 四、写博客 五、打包 六、发布到GitHub 1.新建仓库 2.安装插件 3.修改配置文件:_config.yml 4.部署github 5.查看仓库 6.访问网站 一、前言 安装 Git安装 Node.js 二、Hexo安装、新建、启动 # 安装 h…

智慧园区平台建设解决方案

智慧园区是指利用现代互联网物联网技术,对园区内的设施、设备和人员进行高效管理和智能化运营的一种模式。越来越多的城市开始致力于发展智慧园区,实现园区内的资源共享和高效利用。为了让智慧园区达到最佳的效果,我们需要从平台建设方面入手…

Prettier - Code formatter配置(vscode)

1.安装Prettier 2.设置-->搜索format on save 并打勾 3.搜索default format 并选择Prettier - Code formatter 4.点击右上角打开setting.json 5.看最后一行是否存在如下配置,有就说明配置成功,没有重新前面步骤重新设置一下 6.根目录是否存在.prettierrc.json,没有创建一下 …

vue3原理和源码分析 - watch 源代码

https://github.com/vuejs/vue-next/blob/master/packages/runtime-core/src/apiWatch.ts 目录 Watch /packages/runtime-core/src/apiWatch.ts watch.dot https://github.com/vuejs/vue-next/blob/master/packages/runtime-core/src/apiWatch.ts Watch /packages/runtime…

6.3 B树,B+树

多路平衡查找树 1.定义 B树的阶:B树中所有结点的孩子个数的最大值,表示成m m阶B树:空树或者满足如下特性的m叉树 特性: 1.树中每个结点最多子树 m 关键字m-1 2.根节点不是终端结点,至少有两棵子树 3.根结点除外&…

基于Elasticsearch + Fluentd + Kibana(EFK)搭建日志收集管理系统

目录 1、EFK简介 2、EFK框架 2.1、Fluentd系统架构 2.2、Elasticsearch系统架构 2.3、Kibana系统架构 3、Elasticsearch接口 4、EFK在虚拟机中安装步骤 4.1、安装elasticsearch 4.2、安装kibana 4.3、安装fluentd 4.4、进入kibana创建索引 5、Fluentd配置介绍 Elas…

2023年最受欢迎和最佳WordPress主题(专家精选)

您在找2023年最佳WordPress主题吗? 免费和高级WordPress主题有数以千计,初学者很难为他们的网站选择合适的WordPress主题。 在本文中,我们将分享我们专家精选的2023年所有最受欢迎和最佳的WordPress主题。 本文网址: 2023年最受欢迎和最佳…

Nautilus Chain 推出全新 Layer3 DID 公民身份,限量 10 万枚免费发放

Nautilus Chain 是目前行业内首个模块化的 Layer3 机构链,该链此前基本完成了测试网的早期测试,并有望在近期上线主网。Nautilus Chain 近阶段市场活动频频,除了此前举办全球行活动推广 Layer3 概念外,其也在同期联合 Stanford Bl…

wps文档忘记保存关闭了怎么恢复

1、点击WPS左上角小箭头,点击下拉菜单中的工具选项,然后点击里面的备份中心。 2、在WPS的右侧会看到备份中心的小窗口,里面有自动备份的文件,还可以点击一键恢复即可复原之前的文件内容。 可以对之前时间段的文件打开。

什么是内存溢出,什么是内存泄漏?

文章目录 一、什么是内存溢出?二、什么是内存泄漏?三、如何避免? 提示:以下是本篇文章正文内容,下面案例可供参考 一、什么是内存溢出? 假设我们 JVM 中可用的内存空间只剩下 3M,但是我们要创…

Maven manual

Download maven Download 设置 system env… E:\apache-maven-3.9.3\bin查看版本信息 mvn -v Apache Maven 3.9.3 (21122926829f1ead511c958d89bd2f672198ae9f) Maven home: E:\apache-maven-3.9.3与Eclipse integrate Referrence,通常Eclipse原本就已经集成&am…

[STC32F12K54入门第三步]USART1+Modbus RTU从机

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Modbus RTU是什么?二、Modbus RTU程序展示1.串口配置2.Timer定时器配置3.配置CRC16校验位和Modbus RTU发送函数4.主函数5.效果展示总结提示:以下是本篇文章正文内容,下面案例可供参考 一、…