【redis】redis的过期策略以及内存淘汰机制

news2024/11/13 13:19:46

在这里插入图片描述

前言

今天我们讨论下redis的过期策略以及内存淘汰机制,如果你想要考察一个人对redis的了解,那吗这个问题是必选的,从他对这个问题的回答中,就可以了解到他的redis深浅。

过期策略

先来介绍下,Redis key 过期删除的策略有三种方式:

  • 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key。
  • 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key。

但了解这些还不够,你还应该继续追问下去:

问:
比如你redis只能存5G数据,可是你 写了10G,那会删5G的数据。怎么删的,这个问题思考过么? 还有,你的数据已经设置了过期时间,但是时间到 了,内存占用率还是比较高,有思考过原因么?
答: redis采用的是定期删除+惰性删除策略

问:
为什么不用定时删 除策略?
答: 定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放,但是十分消耗CPU资源。在 大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略

问:
定期删除+惰性删除是如何 工作的呢?
答: 定期删除,redis默认每个100ms检查,是否有过期的key,有过期key则删除。需要说明的是,redis不是 每个100ms将所有的key检查一次,而是随机抽取进行检查(如果每隔100ms,全部key进行检查,redis岂不是卡 死)。因此,如果只采用定期删除策略,会导致很多key到时间没有删除。 于是,惰性删除派上用场。也就是说在你 获取某个key的时候,redis会检查一下,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删 除。

问:
采用定期删除+惰性删除就没其他问题了么?
答: 不是的,如果定期删除没删除key。然后你也没即时去请求key, 也就是说惰性删除也没生效。这样,redis的内存会越来越高。那么就应该采用内存淘汰机制。 在redis.conf中有一 行配置

   # maxmemory-policy volatile-lru

内存淘汰机制

上面的这行代码配置就是配内存淘汰策略的(什么,你没配过?好好反省一下自己) 。

  1. noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。应该没人用吧。
  2. allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。推荐使用,目前项目在用这种。
  3. allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。应该也没人用吧,你不删最少使用Key。去随机删。
  4. volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般是把redis既当缓存,又做持久化存储的时候才用。不推荐
  5. volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键 空间中,随机移除某个key。依然不推荐
  6. volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键 空间中,有更早过期时间的key优先移除。不推荐

那么,你对redis的过期策略以及内存淘汰机制了解多少呢?

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

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

相关文章

虹科产品 | 使用Redis企业版数据库为MySQL增添魅力!

MySQL读取数据慢? 难以轻松扩展? 数据搜索效率低? 无法实时分发数据集? 虹科Redis企业版数据库解决方案来了!企业将Redis企业版数据库与MySQL一起使用,可以实现企业缓存或复制数据库,从而使应用…

MATLAB 非线性规划

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

uniapp APP分享;判断用户是否安装APP,已安装直接打开,未安装跳转下载页;uniapp 在外部打开APP(schemes)

场景: A将某商品分享给B,B点击后判断是否安装APP,若安装直接打开,没有安装则跳转下载页; 知识点: uniapp APP分享;判断用户是否安装APP,已安装直接打开,未安装跳转下载…

从零开始的数模(十一)微分方程建模

目录 一、概念 1.1什么是微分方程建模 1.2使用场合 二、基于python的微分方程建模 2.1scipy.integrate.odeint() 函数 ​编辑2.2案例 ​编辑 三、基于MATLAB的微分方程建模 四、偏微分方程的求解 一、概念 1.1什么是微分方程建模 微分方程建模是数学模型的重要方法&am…

AcWing 1081. 度的数量(数位DP)

AcWing 1081. 度的数量(数位DP)一、问题二 、数位DP三、解析1、题意理解2、题目分析三、代码一、问题 二 、数位DP 这道题是一道数位DP的题目,其实数位DP更像我们在高中阶段学过的排列组合问题中的分类讨论。 数位DP顾名思义就是按照数字的…

B/S端界面控件DevExtreme v22.2新功能 - 如何在日历中显示周数?

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序,该套件附带功能齐…

LeetCode-1145. 二叉树着色游戏【深度优先搜索,二叉树】

LeetCode-1145. 二叉树着色游戏【深度优先搜索,二叉树】题目描述:解题思路一:深度优先搜索分别计算x的左子树lsz和右子树rsz的节点个数。那么除去x与其左右子树的父子树的节点个数为n-1-lsz-rsz。贪心的,那么二号玩家其实可以占据…

Java基础学习笔记(十八)—— 转换流、对象操作流

转换流、对象操作流1 转换流1.1 构造方法1.2 指定编码读写2 对象操作流2.1 对象操作流概述2.2 对象序列化流2.3 对象反序列化流2.4 案例1 转换流 1.1 构造方法 转换流就是来进行字节流和字符流之间转换的 InputStreamReader:是从字节流到字符流的桥梁,…

Linux(八)线程概念

1、线程的本质 线程就是一个进程内部的控制序列 是CPU进行执行调度的基本单元。(调度一段代码的执行是通过线程完成的) 一个进程中至少有一个线程(所以进程与线程的数量关系是 一对一 或 一对多) 2、为什么把线程称为LWP LWP…

数学建模之熵权法(SPSSPRO与MATLAB)

数学建模之熵权法(SPSSPRO与MATLAB)一、基本原理对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大(表明指标值得变异程度越大,提供的信息量越多),该指标对综…

Maxout 激活函数与 Max-Feature-Map (MFM)

前言 最近在读 A Light CNN for Deep Face Representation With Noisy Labels 提到 maxout 激活函数,虽然很好理解,激活的时候选取最大值即可,但是具体细节看了看相关的资料反倒混淆了。参考了一个相关的视频,大致屡清楚为什么说…

技术周 | qemu网络收发包流程

通常我们使用qemu创建虚拟机时,会使用下面的选项指定虚拟网卡设备的类型,以及桥接、tap设备参数等,如下: -device选项用于给虚拟机分配虚拟设备,如磁盘设备、网卡设备等 -netdev选项用于配置虚拟设备的后端&#xff0…

MACD底背离选股公式以及技术指标公式

今天介绍MACD底背离选股公式,整体来说编写难度比较大,按照MACD底背离的定义,需要分别找到2个价格波段低点以及快线DIF的2个低点,并进行比较,最终实现选股。 一、MACD底背离选股公式(平替版) 首先…

ES6 简介(一)

文章目录ES6 简介(一)一、 概述1、 导读2、 Babel 转码器2.1 是什么2.2 配置文件 .babelrc2.3 命令行转码2.4 babel-node2.5 babel/register2.6 polyfill2.7 浏览器环境二、 变量1、 let2、 const3、 ES6 声明变量4、 顶层对象的属性5、 globalThis 对象…

TCP协议面试灵魂12 问(二)

为什么不是两次? 根本原因: 无法确认客户端的接收能力。 分析如下: 如果是两次,你现在发了 SYN 报文想握手,但是这个包滞留在了当前的网络中迟迟没有到达,TCP 以为这是丢了包,于是重传,两次握手建立好了…

机器视觉高速发展催热人工智能市场,深眸科技深度布局把握新机遇

曾经,冰箱侧身的标签、空调背面不显眼的小螺丝、微波炉角落里的型号编码等质量检测,是工业生产线中最费人工、最难检测的“老大难”。这主要是因为我国家电行业长期以混产为主要生产方式,一条生产线上可能有几十种型号的钣金件产品同时经受质…

文档存储Elasticsearch系列--2 ES内部原理

前言:ES作为nosql 的数据存储,为什么它在承载PB级别的数据的同时,又可以对外提高近实时的高效搜索,它又是通过什么算法完成对文档的相关性分析;又是怎么保证聚合的高效性; 1 ES 分布式文档存储&#xff1a…

人工智能导论——谓词公式化为子句集详细步骤

在谓词逻辑中,有下述定义: 原子(atom)谓词公式是一个不能再分解的命题。 原子谓词公式及其否定,统称为文字(literal)。PPP称为正文字,P\neg PP称为负文字。PPP与P\neg PP为互补文字。…

MySQL实战作业示例:从离线文件生成数据库

前言 MySQL实战的课后作业,作业内容具体见 https://bbs.csdn.net/topics/611904749 截至时间是 2023年2月2日,按时提交的同学有一位。确实这次的作业非常有挑战性,作业用到的内容没有百分之百的学过,需要大家进行深入而有效的搜索…

【MyBatis】高级映射多对一,一对多和延迟加载

数据库准备:1. 多对一:多个学生对应一个班级(学生表是主表, 班级表是副表)多种实现方式, 常见的包括三种第一种方式&#xff1a; 一条sql语句, 级联属性映射// StudentMapper.xml // 一条sql语句, 级联属性映射 <resultMap id"studentResultMap" type"Studen…