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

Redis——数据淘汰策略

文章目录

  • 1. 引入
  • 2. 讲解
    • 2.1 Redis 中的 8 种数据淘汰策略
    • 2.2 LRU 和 LFU 算法
    • 2.3 建议
  • 3. 总结


1. 引入

在 Redis——数据过期策略 的“引入”部分讲解过,Redis 的数据存在内存中,而内存容量相对较小,不能将大量数据 无限期 地缓存。然而,对于有些场景,例如 缓存击穿 的解决方案二——逻辑过期,需要将一部分数据 “无限期” 地缓存到 Redis 中;或者在某一时间段内,海量查询请求使得大量数据缓存到 Redis 中。

那么当缓存的数据越来越多,直至 Redis 的最大内存限制时,Redis 会如何应对呢?这就涉及到本文要讲的 数据淘汰策略 (缓存淘汰策略),即 Redis 在内存达到最大限制时,为了释放空间,选择键删除的方式

2. 讲解

2.1 Redis 中的 8 种数据淘汰策略

Redis 的数据淘汰策略共有 8 种:

  • noeviction:不淘汰任何键,内存达到最大限制后不允许写入新数据,是 默认策略
  • volatile-ttl:对设置了 TTL (Time-to-Live,过期时间) 的键,比较键的剩余 TTL 值,TTL 越小的值,越先淘汰。
  • allkeys-random:对于所有键,随机选择并淘汰。
  • volatile-random:对于设置了 TTL 的键,随机选择并淘汰。
  • allkeys-lru:对于所有键,基于 LRU 算法进行淘汰。
  • volatile-lru:对于设置了 TTL 的键,基于 LRU 算法进行淘汰。
  • allkeys-lfu:对于所有键,基于 LFU 算法进行淘汰。
  • volatile-lfu:对于设置了 TTL 的键,基于 LFU 算法进行淘汰。

在 Redis 的 redis.conf 配置文件中,配置方式如下:

maxmemory-policy allkeys-lru # 使用 对所有键按 LRU 淘汰 的策略

2.2 LRU 和 LFU 算法

  • LRU (Least Recently Used,最近最少使用):重点关注数据的 使用时间,淘汰 最久未使用 的数据。假如三个键 name, age, weight 从前到后依次缓存到 Redis 中,并且使用的顺序为 age -> name -> weight -> name,如果需要基于 LRU 淘汰,则淘汰的优先级是 age > weight > name
  • LFU (Least Frequently Used,最少频率使用):重点关注数据的 使用频率,淘汰 使用频率最低 的数据。

2.3 建议

  • 一般情况下,使用 allkeys-lru 策略,把 最近最常用 的数据留在缓存中。因为大部分情况下,数据都是有 冷热 之分的,也就说有些数据 访问频率 高,有些低;然而 很久之前的 访问频率高的 数据再被访问的可能性不大,所以不需要缓存很久之前的数据。综上所述,一般情况适合使用 allkeys-lru 策略。

3. 总结

当 Redis 的内存达到最大限制时,Redis 会根据指定数据淘汰策略,选择一些数据进行淘汰。其中,需要重点理解 LRU (淘汰最久未使用的数据) 和 LFU (淘汰使用频率最低的数据) 这两种算法。在生产中,建议使用 allkeys-lru 这种数据淘汰策略,保存 最近最常用 的数据。

相关文章:

Redis——数据淘汰策略

文章目录 1. 引入2. 讲解2.1 Redis 中的 8 种数据淘汰策略2.2 LRU 和 LFU 算法2.3 建议 3. 总结 1. 引入 在 Redis——数据过期策略 的“引入”部分讲解过,Redis 的数据存在内存中,而内存容量相对较小,不能将大量数据 无限期 地缓存。然而&a…...

机器学习之KNN算法预测数据和数据可视化

机器学习及KNN算法 目录 机器学习及KNN算法机器学习基本概念概念理解步骤为什么要学习机器学习需要准备的库 KNN算法概念算法导入常用距离公式算法优缺点优点:缺点︰ 数据可视化二维界面三维界面 KNeighborsClassifier 和KNeighborsRegressor理解查看KNeighborsRegr…...

前端node.js

一.什么是node.js 官网解释:Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 二.初步使用node.js 需要区分开的是node.js和javascript互通的只有console和定时器两个API. 三.Buffer Buffer 是一个类似于数组的对象,用于表示固定长度的字节序列。 Buffer…...

Excel基础知识

一:数组 一行或者一列数据称为一维数组,多行多列称为二维数组,数组支持算术运算(如加减乘除等)。 行:{1,2,3,4} 数组中的每个值用逗号分隔列:{1;2;3;4} 数组中的每个值用分号分隔行列&#xf…...

Spring Boot对访问密钥加密解密——RSA

场景 用户无需登录,仅仅根据给定的访问keyId和keySecret就可以访问接口。 keyId 等可以明文发送(不涉及机密),后端直接从请求头读取。keySecret 不可明文,需要加密后放在另一个请求头(或请求体&#xff0…...

Vue介绍

一、Vue框架简介 Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它的核心库只关注视图层,易于上手,并且可以与其他库或现有项目进行整合。其特点包括响应式数据绑定、组件化开发和虚拟DOM等。 响应式数据绑定 Vue通过Object.defineProperty()方法来进行数据劫持。当…...

表单元素(标签)有哪些?

HTML 中的表单元素&#xff08;标签&#xff09;用于收集用户输入的数据&#xff0c;常见的有以下几种&#xff1a; 文本输入框 <input type"text">&#xff1a;用于单行文本输入&#xff0c;如用户名、密码等。可以通过设置maxlength属性限制输入字符数&…...

人工智能与云计算的结合:如何释放数据的无限潜力?

引言&#xff1a;数据时代的契机 在当今数字化社会&#xff0c;数据已成为推动经济与技术发展的核心资源&#xff0c;被誉为“21世纪的石油”。从个人消费行为到企业运营决策&#xff0c;再到城市管理与国家治理&#xff0c;每个环节都在生成和积累海量数据。然而&#xff0c;数…...

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…...

【MyBatis 核心工作机制】注解式开发与动态代理原理

有很多朋友可能已经在开发中熟练使用 MyBatis 或者刚开始学习 MyBatis&#xff0c;对于它的一些工作机制不太了解。“咦&#xff0c;怎么写几个注解&#xff0c;写几个配置文件&#xff0c;就能实现这些效果呢&#xff0c;好神奇呀&#xff01;”当你看完这篇博客之后&#xf…...

深度学习在图像识别中的最新进展与实践案例

深度学习在图像识别中的最新进展与实践案例 在当今信息爆炸的时代&#xff0c;图像作为信息传递的重要载体&#xff0c;其处理与分析技术显得尤为重要。深度学习&#xff0c;作为人工智能领域的一个分支&#xff0c;凭借其强大的特征提取与模式识别能力&#xff0c;在图像识别…...

vue3中如何自定义插件

英译汉插件 i18n.ts export default {install: (app: any, options: any) > {// 注入一个全局可用的$translate()方法app.config.globalProperties.$translate (key: string) > {// 获取options对象的深层属性// 使用key作为索引return key.split(".").redu…...

【机器学习】回归

文章目录 1. 如何训练回归问题2. 泛化能力3. 误差来源4. 正则化5. 交叉验证 1. 如何训练回归问题 第一步&#xff1a;定义模型 线性模型&#xff1a; y ^ b ∑ j w j x j \hat{y} b \sum_{j} w_j x_j y^​b∑j​wj​xj​ 其中&#xff0c;( w ) 是权重&#xff0c;( b )…...

Maven项目中不修改 pom.xml 状况下直接运行OpenRewrite的配方

在Java 的Maven项目中&#xff0c;可以在pom.xml 中配置插件用来运行OpenRewrite的Recipe&#xff0c;但是有一些场景是希望不修改pom.xml 文件就可以运行Recipe&#xff0c;比如&#xff1a; 因为不需要经常运行 OpenRewrite&#xff0c;所以不想在pom.xml 加入不常使用的插件…...

【翻译】Sora 系统卡-12月9日

Sora System ard | OpenAI 简介 Sora 概述 Sora 是 OpenAI 的视频生成模型&#xff0c;旨在接收文本、图像和视频输入并生成新视频作为输出。用户可以创建各种格式的分辨率高达 1080p&#xff08;最长 20 秒&#xff09;的视频&#xff0c;从文本生成新内容&#xff0c;或增强…...

如何在 Spring Boot 微服务中设置和管理多个数据库

在现代微服务架构中&#xff0c;通常需要与多个数据库交互的服务。这可能是由于各种原因&#xff0c;例如遗留系统集成、不同类型的数据存储需求&#xff0c;或者仅仅是为了优化性能。Spring Boot 具有灵活的配置和强大的数据访问库&#xff0c;可以轻松配置多个数据库。在本综…...

Ubuntu20.04安装Foxit Reader 福昕阅读器

Ubuntu20.04安装Foxit Reader 福昕阅读器 文章目录 Ubuntu20.04安装Foxit Reader 福昕阅读器 先更新一下源 sudo apt update sudo apt upgrade下载Foxit Reader的稳定版本 wget https://cdn01.foxitsoftware.com/pub/foxit/reader/desktop/linux/2.x/2.4/en_us/FoxitReader.e…...

学习threejs,THREE.CircleGeometry 二维平面圆形几何体

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.CircleGeometry 圆形…...

Tonghttpserver6.0.1.3 使用整理(by lqw)

文章目录 1.声明2.关于单机版控制台和集中管理控制台3.单机版控制台3.1安装&#xff0c;启动和查看授权信息3.2一些常见的使用问题&#xff08;单机控制台&#xff09;3.3之前使用的是nginx&#xff0c;现在要配nginx.conf上的配置&#xff0c;在THS上如何配置3.4如何配置密码过…...

redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线

文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…...

科研级时间序列解析:从 ARIMA 到 Mamba,深度学习与频域分析的全栈技术方案

时间序列是水文、气象等领域中最为常见的数据类型&#xff0c;对时间序列数据的预测、分类以及异常值检测等也是这些领域最常见的任务&#xff1b;但是&#xff0c;时间序列分析技术从二十世纪二十年代兴起&#xff0c;一百年以来已经变的非常繁杂。以实践序列分析为主线&#…...

Zookeeper 选举机制解析

zk中有两种角色&#xff1a;Leader 和 FllowerLeader是集群各台电脑投票选举出来的。事务【非常重要】&#xff1a;一通操作&#xff0c;要么同时成立&#xff0c;要么都不成立。zookeeper:Leader&#xff1a;Zookeeper 集群工作的核心。1、事务请求&#xff08;写操作&#xf…...

终极Gmail桌面应用开发指南:从源码到专业级邮件客户端部署

终极Gmail桌面应用开发指南&#xff1a;从源码到专业级邮件客户端部署 【免费下载链接】gmail-desktop :postbox: Gmail desktop app for macOS, Windows & Linux (formerly Gmail Desktop) 项目地址: https://gitcode.com/gh_mirrors/gm/gmail-desktop Meru&#x…...

Spring AI Alibaba vs. AgentScope:两个阿里AI框架,如何选择?

Spring AI Alibaba vs. AgentScope&#xff1a;两个阿里AI框架&#xff0c;如何选择&#xff1f;发布日期&#xff1a;2026年4月9日前言 最近技术圈中&#xff0c;阿里巴巴开源的 Spring AI Alibaba 和 AgentScope 引发广泛讨论。两者同为阿里出品&#xff0c;但设计哲学和应用…...

Cinema 4D 项目一天就能渲染完?5分钟提交渲染农场任务

很多刚接触 Cinema 4D 云渲染 的用户都会有一个疑问&#xff1a;“我今天能不能马上把项目放到渲染农场渲染&#xff1f;”答案是 可以的。实际上&#xff0c;从注册到提交渲染任务&#xff0c;整个流程通常只需要几分钟。只要你的项目准备好&#xff0c;就可以立即开始渲染。渲…...

Nano-Banana模型优化技巧:使用C++提升推理性能

Nano-Banana模型优化技巧&#xff1a;使用C提升推理性能 最近Nano-Banana模型在图像生成领域火得一塌糊涂&#xff0c;无论是像素级拆解还是商业海报制作&#xff0c;效果都让人惊艳。不过很多开发者在实际部署时发现一个问题&#xff1a;用Python调用虽然方便&#xff0c;但推…...

如何高效下载小红书无水印内容?XHS-Downloader让内容采集效率提升3倍

如何高效下载小红书无水印内容&#xff1f;XHS-Downloader让内容采集效率提升3倍 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作品…...

WechatBakTool:面向非技术用户的微信聊天记录备份与管理解决方案

WechatBakTool&#xff1a;面向非技术用户的微信聊天记录备份与管理解决方案 【免费下载链接】WechatBakTool 基于C#的微信PC版聊天记录备份工具&#xff0c;提供图形界面&#xff0c;解密微信数据库并导出聊天记录。 项目地址: https://gitcode.com/gh_mirrors/we/WechatBak…...

FireRedASR-AED-L语音识别模型WebUI部署教程:Python环境快速配置指南

FireRedASR-AED-L语音识别模型WebUI部署教程&#xff1a;Python环境快速配置指南 想试试最新的语音识别模型&#xff0c;但被复杂的Python环境配置和依赖包冲突劝退&#xff1f;这感觉我太懂了。每次看到新模型发布&#xff0c;兴致勃勃地准备上手&#xff0c;结果第一步环境搭…...

5个核心价值:docx2tex实现DOCX到LaTeX的高效转换

5个核心价值&#xff1a;docx2tex实现DOCX到LaTeX的高效转换 【免费下载链接】docx2tex Converts Microsoft Word docx to LaTeX 项目地址: https://gitcode.com/gh_mirrors/do/docx2tex 在学术论文撰写中&#xff0c;一位研究生花费数小时手动调整从Word转换过来的LaTe…...