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

redis的过期策略和内存淘汰机制(redis篇)

分享并学习一下redis的过期策略和内存淘汰机制

在平时的工作或者学习中,即便自己没有实打实的用过redis。但是能有对这方面的思考,再结合一些实际场景和理论,那么我相信自己或者你都会越来越厉害的。

 首先,我们需要认清为啥redis要有过期策略?

如果这个点大家都不太清楚的话,建议先去了解了解redis的作用和redis怎么诞生的。

其实,理解起来很简单,大家只要记住。redis是基于内存的就行了,内存存储有限,所以存储数据时,会有一个过期时间考虑。

可能有同学会遇到,在生产环境的 Redis 经常会丢掉一些数据,写进去了,过一会儿可能就没
了。我的天,同学,你问这个问题就说明 Redis 你就没用对啊。 Redis 是缓存,你给当存储了是
吧?
啥叫缓存?用内存当缓存。内存是无限的吗,内存是很宝贵而且是有限的,磁盘是廉价而且是
大量的。可能一台机器就几十个 G 的内存,但是可以有几个 T 的硬盘空间。 Redis 主要是基于
内存来进行高性能、高并发的读写操作的。
那么redis的过期策略的核心思想是啥呢?
Redis 过期策略是: 定期删除 + 惰性删除
所谓 定期删除 ,指的是 Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key ,检查 其是否过期,如果过期就删除。
假设 Redis 里放了 10w key ,都设置了过期时间,你每隔几百毫秒,就检查 10w key ,那 Redis 基本上就死了, cpu 负载会很高的,消耗在你的检查过期 key 上了。注意,这里可不是每 隔 100ms 就遍历所有的设置过期时间的 key ,那样就是一场性能上的 灾难 。实际上 Redis 是每 隔 100ms 随机抽取 一些 key 来检查和删除的。
惰性删除:即便key过期了,但是redis不做任何操作。当下次访问时,检查如果过期,那么redis就把key数据删除。
但是实际上这还是有问题的,如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期 key 堆积在内存里,导致 Redis 内存块耗尽了, 咋整?那就走内存淘汰机制

 内存淘汰机制:

1、noeviction: 当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧。

2、 allkeys-lru :当内存不足以容纳新写入数据时,在 键空间 中,移除最近最少使用的 key (这
个是 最常用 的)。
3、 allkeys-random :当内存不足以容纳新写入数据时,在 键空间 中,随机移除某个 key ,这个
一般没人用吧,为啥要随机,肯定是把最近最少使用的 key 给干掉啊。
4、 volatile-lru :当内存不足以容纳新写入数据时,在 设置了过期时间的键空间 中,移除最近
最少使用的 key (这个一般不太合适)。
5、 volatile-random :当内存不足以容纳新写入数据时,在 设置了过期时间的键空间 中, 随机
移除 某个 key
6、 volatile-ttl :当内存不足以容纳新写入数据时,在 设置了过期时间的键空间 中,有 更早过
期时间 key 优先移除。
我觉得工作中记住常用的即可,面试的话最好都了解一下。

相关文章:

redis的过期策略和内存淘汰机制(redis篇)

分享并学习一下redis的过期策略和内存淘汰机制 在平时的工作或者学习中,即便自己没有实打实的用过redis。但是能有对这方面的思考,再结合一些实际场景和理论,那么我相信自己或者你都会越来越厉害的。 首先,我们需要认清为啥redis要…...

Java中Runnable和Callable有什么不同?(企业真题)

Java中Runnable和Callable有什么不同? 与之前的方式的对比:与Runnable方式的对比的好处 call()可以有返回值,更灵活 call()可以使用throws的方式处理异常,更灵活 Callable使用了泛型参数,可以指明具体的call()的返回值…...

图机器学习导论

图:描述关系数据的通用语言,起源于哥尼斯堡七桥问题 传统的机器学习:数据样本之间独立同分布,简单拟合数据边界,在传统的机器学习中,每个数据样本彼此无关。传统的神经网络,只能处理简单的表格、…...

地推网推拉新平台哪家强?一文清楚告诉你

在当今这个充满副业的时代,地推网推拉新平台的寻找与对接成为了许多人关注的焦点。那么,我们应该如何找到那些既靠谱又有潜力的拉新项目呢? 经过深入研究和全网检索,我为大家盘点了5个值得一试地推网推拉新平台。 尤其是“聚小推…...

Day:004(4) | Python爬虫:高效数据抓取的编程技术(数据解析)

XPath工具 浏览器-元素-CtrlF 浏览器-控制台- $x(表达式) Xpath helper (安装包需要科学上网) 问题 使用离线安装包 出现 程序包无效 解决方案 使用修改安装包的后缀名为 rar,解压文件到一个文件夹,再用 加载文件夹的方式安装即可 安装 python若使用…...

(80) 只出现一次的数字(81)反转字符串

文章目录 1. 每日一言2. (80) 只出现一次的数字2.1 解题思路2.2 代码 3. (81)反转字符串3.1 解题思路3.2 代码 4. 结语 1. 每日一言 生活是一场即兴表演,值得庆幸的是我们总是有所感受,并且将一直感受下去。 2. (80) 只出现一次的数字 题目链接&#x…...

基于拉格朗日分布算法的电动汽车充放电调度MATLAB程序

微❤关注“电气仔推送”获得资料(专享优惠) 程序简介 该模型主要做的是基于拉格朗日分布算法的电动汽车充放电调度模型。利用蒙特卡洛模拟法模拟出电动汽车负荷曲线,并求解出无序充电功率曲线和有序充电曲线,该模型在电动汽车个…...

【Linux 学习】进程优先级和命令行参数!

1. 什么是优先级? 指定进程获取某种资源(CPU)的先后顺序; Linux 中优先级数字越小,优先级越高; 1.1 优先级和权限的区别? 权限 : 能不能做 优先级: 已经能了,但是获…...

Git删除未跟踪的文件Untracked files

在 Git 中,要删除未跟踪的文件(Untracked files),你可以使用 git clean 命令。请注意,这个命令会从你的工作目录中永久删除这些文件,因此在执行之前请确保你不再需要这些文件或已经妥善备份。 以下是如何使…...

S7-1200PLC控制V90伺服通过FB284实现位置控制的方法

S7-1200PLC控制V90伺服通过FB284实现位置控制的方法 通过西门子报文111和FB284功能块 在V-ASSISTANT中将V90 PN设置控制模式为"基本位置控制(EPOS)" V90 PN与PLC采用PROFINET RT通信方式并使用西门子报文111。 在博途中V90 PN的设备视图中更改报文为:报文111 安装…...

2024年阿里云优惠券领取和使用方法

阿里云优惠代金券领取入口,阿里云服务器优惠代金券、域名代金券,在领券中心可以领取当前最新可用的满减代金券,阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法: 阿里云优惠券…...

工业项目中你连PLM系统都没见过?

什么是 PLM 软件? PLM 软件是用于管理全球供应链中产品或服务全生命周期环节的解决方案。它包括从物料、零部件、产品、文档、规定、工程变更单到质量工作流的数据管理。 PLM 的发展历史 从最初的产品设计管理到如今的数字化转型和智能化生产,PLM 在不断…...

【QT入门】 Qt自定义控件与样式设计之QPushButton实现鼠标悬浮按钮弹出对话框

往期回顾: 【QT入门】 Qt自定义控件与样式设计之qss选择器-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QLineEdit的qss使用-CSDN博客 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QPushButton实现鼠标悬…...

C盘变红怎么办?免费的系统C盘清理方法,C盘空间占用克星

百夫说:分享免费又好用的工具,是一件快乐的事情。 正文: 起因:C盘报警,系统变慢 立即下载XX系统清理大师,搜索出垃圾数据近30G,开心的点击“一键清理”,结果提示要收费&#xff1a…...

简述VPS 与 Apache 搭建网站方式对比:新手科普指南

在互联网时代,拥有一个网站对于个人、企业以及组织来说已经成为了必备的一项资源。然而,对于新手来说,如何搭建一个网站可能是一个挑战。在这篇文章中,我将探讨两种常见的搭建网站的方式:使用虚拟专用服务器&#xff0…...

js获取年月份

一、date 如何使用、如何获取年月日时分秒、时间戳、如何获取指定日期的时间戳或周几 1..Date 对象用于处理日期和时间。 创建 Date 对象的语法: var myDatenew Date() 获取年月日时分秒: // 格式化日对象 const getNowDate () > {let date new …...

Promise常用方法及区别

一、实例方法 let _fun new Promise((resolve, reject) > {reject("失败!"); }); /* resolve:异步操作成功时调用的回调函数。 reject:异步操作失败时调用的回调函数。 */ _fun.then(res > { // 成功console.log(res: , re…...

pyqt 标题栏设置

在PyQt中,可以通过QWidget或其子类(如QMainWindow或QDialog)的setWindowTitle()方法来设置窗口的标题栏。以下是一个简单的例子,展示了如何为应用程序的主窗口设置标题: import sys from PyQt5.QtWidgets import QApp…...

关于可视化大屏适配

一、目前市场上适配方案有两种; vw、vh方案: 原理:按照设计稿的尺寸,将px按比例计算转为vw和vh; 优点:不会存在失真情况、可以动态计算图表的宽高,字体等,灵活性较高,…...

如何用composer来安装和配置LAMP环境?

LAMP环境是一个开发和运行Web应用程序的常见环境,它由Linux、Apache、MySQL和PHP组成。Composer是一个用于管理PHP依赖关系的工具,可以方便地安装和配置LAMP环境中的各种软件包。下面是使用Composer安装和配置LAMP环境的步骤: 安装Composer&a…...

CosyVoice 2 目标音色替换技术解析:从原理到小白友好实现

音色替换,简单说就是让一段语音听起来像是另一个人在说话,但内容不变。这技术现在需求挺多的,比如虚拟主播、有声书、游戏角色配音,甚至一些辅助沟通的场景。但说实话,以前想自己搞一个,门槛不低。要么效果…...

SEO_10个提升网站排名的实用SEO技巧分享(340 )

SEO技巧之一:关键词研究与优化 在SEO策略中,关键词研究和优化是至关重要的一步。为了让百度能够更好地理解你的网站内容,你需要选择合适的关键词。要明确你的目标受众,并了解他们在搜索引擎中可能使用的关键词。通过工具如百度关键…...

协程中断、EventLoop关闭、SSE断连、StreamingResponse阻塞、模型推理卡顿,FastAPI 2.0流式AI响应5大崩溃场景全解析,

第一章:FastAPI 2.0流式AI响应的底层机制与设计边界FastAPI 2.0 对流式响应(StreamingResponse)进行了深度重构,其核心依托于 ASGI 3.0 规范中对异步可迭代对象(async iterable)的原生支持,而非…...

OpenClaw+nanobot自动化写作:Qwen3-4B模型内容生成实测

OpenClawnanobot自动化写作:Qwen3-4B模型内容生成实测 1. 为什么需要自动化写作助手 作为一个技术博客作者,我经常面临一个困境:有太多想写的内容,但时间总是不够用。从选题、资料收集到初稿撰写、排版校对,每个环节…...

git不跟踪文件夹

git不跟踪文件夹假设你有一个名为build的文件夹,你想从Git跟踪中移除它: 1.移除跟踪: bash git rm -r --cached build/ 2.提交更改: bash git commit -m “Remove logs folder from tracking” 3确保未来不被跟踪: bas…...

率零降AI工具新手教程:零基础也能快速降论文AIGC率

率零降AI工具新手教程:零基础也能快速降论文AIGC率 你可能已经听说了各种降AI工具,但打开网站看到一堆选项就头大。 这篇教程专门给"完全没用过降AI工具"的同学写。我选了操作最简单的率零来做演示——它的界面简洁到几乎不需要学习&#xff0…...

PyTorch 2.8镜像保姆级教程:workspace/models目录模型加载全流程

PyTorch 2.8镜像保姆级教程:workspace/models目录模型加载全流程 1. 镜像环境准备 1.1 硬件与系统要求 本教程使用的PyTorch 2.8镜像已针对RTX 4090D 24GB显卡和CUDA 12.4进行深度优化,以下是运行环境的最低要求: 显卡:NVIDIA…...

先收藏 | OWASP Top10 第二坑:Java开发踩过的配置漏洞

OWASP 2025最新风险榜单出炉,安全配置错误稳居第二,数据戳破行业假象:100%被测Java应用全中招,总漏洞数超71.9万次。很多Java程序员自嘲:写得了高并发、调得通分布式,却栽在最基础的配置细节上。这些看似不…...

【调优】Openclaw高阶调优指南之配置篇

适配openclaw 2026.3.23+版本,收录于 养龙虾专栏 本文的配置调优主要包含如下内容,优化调整的地方均有截图,无需担心命令无效: 标题 配置优化内容 主要内容概要 一、OpenClaw配置体系概述 1. 配置文件结构与位置 介绍 openclaw.json 的路径及 JSON5 格式特性 2. 配置生效机…...

材料科学家的终极神器:pymatgen完整指南与实战应用

材料科学家的终极神器:pymatgen完整指南与实战应用 【免费下载链接】pymatgen Python Materials Genomics (pymatgen) is a robust materials analysis code that defines classes for structures and molecules with support for many electronic structure codes.…...