1. 为什么需要内存淘汰策略?

Redis 是一个基于内存的高性能数据库,所有数据都存储在内存中。

  • 优点:读写速度极快。

  • 缺点:内存有限,存满之后如果继续写入,就必须有一套策略来决定“删掉谁,留下谁”。

这就是 内存淘汰策略(Eviction Policy)
配置参数:

maxmemory <bytes>     # 限制 Redis 使用的最大内存
maxmemory-policy <policy>  # 设置淘汰策略

2. Redis 内存淘汰策略分类

Redis 提供了 8 种内存淘汰策略(6 个淘汰策略 + 2 个特殊模式)。

(1)不淘汰

  • noeviction(默认)

    • 当内存不足时,直接返回错误,不再接受写入请求(读请求正常)。

    • 适合当 Redis 作为缓存以外的使用场景,比如严格控制数据不丢失。


(2)针对设置了过期时间(TTL)的 key

  • volatile-lru:在设置了过期时间的 key 中,淘汰最近最少使用的 key。

  • volatile-lfu:在设置了过期时间的 key 中,淘汰使用频率最低的 key。

  • volatile-ttl:在设置了过期时间的 key 中,优先淘汰 TTL(剩余生存时间)最短的 key。

  • volatile-random:在设置了过期时间的 key 中,随机淘汰一个 key。


(3)针对所有 key

  • allkeys-lru:在所有 key 中,淘汰最近最少使用的 key(常见策略)。

  • allkeys-lfu:在所有 key 中,淘汰使用频率最低的 key(更智能)。

  • allkeys-random:在所有 key 中,随机淘汰一个 key。


3. 各策略优缺点

策略说明优点缺点应用场景
noeviction默认,不淘汰,写操作报错数据绝对安全无法继续写入严格控制数据不可丢失
volatile-lru在设置过期时间的 key 中淘汰最近最少使用常用缓存策略只作用于设置 TTL 的 key缓存系统,定期过期数据
allkeys-lru在所有 key 中淘汰最近最少使用最常用,命中率高可能误删重要数据通用缓存
volatile-lfu在设置过期时间的 key 中淘汰使用频率最低更智能的缓存淘汰计算频率有额外开销热点数据缓存
allkeys-lfu在所有 key 中淘汰使用频率最低热点数据保留更久实现复杂,性能略低高频访问的缓存系统
volatile-ttl在设置过期时间的 key 中,优先淘汰 TTL 最短的控制过期优先级使用场景少时间敏感型缓存
volatile-random在设置过期时间的 key 中随机淘汰简单命中率低特殊场景
allkeys-random在所有 key 中随机淘汰简单命中率低低优先级缓存

4. 实际推荐方案

  • allkeys-lru:最常用,适合做缓存,保证热点数据尽量保留。

  • allkeys-lfu:Redis 4.0+ 引入,更智能,适合热点数据集变化较快的场景。

  • volatile-ttl:适合有明显过期优先级的业务,例如“临期数据优先清理”。


5. 总结

  • Redis 内存满时需要根据策略来淘汰数据。

  • LRU(Least Recently Used) → 淘汰最近最少用的数据。

  • LFU(Least Frequently Used) → 淘汰使用次数最少的数据。

  • TTL → 优先淘汰即将过期的数据。

  • 推荐 allkeys-lruallkeys-lfu,适合大多数缓存场景。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse 里Mybatis的xml的头部报错

需要进行Eclipse 配置 MyBatis 的DTD文件Window -> Preference -> Maven -> 勾选 (download artifact javadoc).

SpringBoot Web快速入门_从零搭建你的第一个Web应用

在 Java 企业级开发领域&#xff0c;SpringBoot 以其 “约定优于配置” 的理念彻底革新了传统 Spring 应用的开发模式。根据 2023 年 JetBrains 开发者调查报告&#xff0c;超 65% 的 Java 开发者将 SpringBoot 选为 Web 开发的首选框架。其优势显著&#xff1a;快速启动&#…

手持 Mid360 + RealSense 相机 + Jetson Orin 一体平台

这篇博客是我们开源的一个项目介绍&#xff0c;包括3D结构件 STP 文件与常见 SLAM 工程在 Arm 设备上编译手册等&#xff0c;将 Livox Mid360、Realsense 相机、Nvidia Jetson Orin、定制电池放在了一个手持设备上&#xff0c;同时这个手持设备预留了底部螺纹孔&#xff0c;当你…

H7-TOOL固件2.31发布,支持250M示波器,支持IAR下载算法加载运行,上位机支持UTF-8编码,增加多款脱机烧录芯片支持

【PC软件】V2.3.1 1. 脱机烧录功能更新: - 添加芯片: - 自动填充文件名、Flash地址、Flash大小、SRAM地址和SRAM大小 - FLM算法文件不支持自动填写文件名&#xff0c;当生成文件后需要手动更新 - 厂商列表栏鼠标右键菜单可复制厂商名 - 修复添加芯片排列次序的问题…

自然语言处理——06 迁移学习(上)

1 fasttext工具介绍 1.1 介绍 fasttext 是 Facebook AI Research&#xff08;FAIR&#xff09;开发的开源 NLP 工具包&#xff0c;专门用来解决文本相关任务&#xff0c;比如情感分析、文本分类&#xff08;判断新闻属于体育/财经等&#xff09;、识别“人名/地名”这类实体&a…

数据库MVCC是什么

问题数据库MVCC是什么我的回答MVCC&#xff0c;全称是"多版本并发控制"(Multi-Version Concurrency Control)&#xff0c;是数据库管理系统中常用的一种并发控制技术。说白了&#xff0c;它就是通过维护数据的多个版本&#xff0c;让读操作不会被写操作阻塞&#xff…

游戏广告投放数据分析项目:拆解投放的“流量密码”

用数据说话&#xff1a;1441条投放记录拆解游戏广告投放的“流量密码”一、数据概况 & 处理思路 先放一张数据全家福&#xff0c;字段 13 个&#xff0c;样本 1441 条&#xff0c;缺失值 0&#xff0c;只做了一件事&#xff1a;把“未知大小”“无”等脏数据清洗掉。 impor…

数据库服务语句应用

文章目录&#x1f31f;数据库语句应用介绍&#x1f340;数据库语句分类介绍DDL&#xff08;Data Definition Language&#xff09;数据定义语言DCL&#xff08;Data Control Language&#xff09;数据控制语言DML&#xff08;Data Manipulation Language&#xff09;数据操作语…

解释器模式与布尔表达式的C++实现

详细探讨一下解释器模式(Interpreter Pattern)以及如何使用它来实现一个简单的布尔表达式求值器。 第一部分:解释器模式详解 1. 模式定义与意图 解释器模式是一种行为设计模式,它给定一个语言,定义其文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中…

ELK 重难点解析以及最佳实践

ELK 重难点解析以及最佳实践 目录 ELK简介核心组件详解使用技巧重难点解析Spring Boot集成具体场景使用最佳实践 ELK简介 什么是ELK ELK是一个开源的日志分析平台&#xff0c;由三个核心组件组成&#xff1a; Elasticsearch: 分布式搜索引擎&#xff0c;用于存储和检索日…

【PyTorch】单对象分割项目

对象分割是在图像中找到目标对象的边界的过程。单目标分割的重点是自动勾勒出图像中一个目标对象的边界。对象边界通常由二进制掩码定义。 通过二进制掩码&#xff0c;可以在图像上覆盖轮廓以勾勒出对象边界。例如以下图片描绘了胎儿的超声图像、胎儿头部的二进制掩码以及覆盖在…

esp dl

放下了好多年 又回到了dl 该忘的也忘的差不多了 其实没啥复杂的 只是不习惯 熟悉而已 好吧 现代的人工智能体 还是存在着很大的问题 眼睛 耳朵 思考 虽然功能是正常的 但距离&#xff02;真正&#xff02;(&#xff09;意思上的独立意识个体 还是差别很大 再等个几十年 看看…

基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城

基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城

详解ThreadLocal<HttpServletRequest> requestThreadLocal

public static ThreadLocal<HttpServletRequest> requestThreadLocal ThreadLocal.withInitial(() -> null);一、代码逐部分详解 1. public static public&#xff1a;表示这个变量是公开的&#xff0c;其他类可以访问。static&#xff1a;表示这是类变量&#xff0c…

Vue2 响应式系统设计原理与实现

文章目录Vue2 响应式系统设计原理与实现Vue2 响应式系统设计原理与实现 Vue2 的响应式原理主要基于以下几点&#xff1a; 使用 Object.defineProperty () 方法对数据对象的属性进行劫持 当数据发生变化时&#xff0c;通知依赖该数据的视图进行更新 实现一个发布 - 订阅模式&a…

探索 JUC:Java 并发编程的神奇世界

探索 JUC&#xff1a;Java 并发编程的神奇世界 在 Java 编程领域&#xff0c;随着多核处理器的普及和应用场景复杂度的提升&#xff0c;并发编程变得愈发重要。Java 并发包&#xff08;JUC&#xff0c;Java.util.concurrent&#xff09;就像是一座宝藏库&#xff0c;为开发者提…

selenium采集数据怎么应对反爬机制?

selenium是一个非常强大的浏览器自动化工具&#xff0c;通过操作浏览器来抓取动态网页内容&#xff0c;可以很好的处理JavaScript和AJAX加载的网页。 它能支持像点击按钮、悬停元素、填写表单等各种自动化操作&#xff0c;所以很适合自动化测试和数据采集。 selenium与各种主流…

指定文件夹上的压缩图像格式tiff转换为 jpg 批量脚本

文章大纲 背景简介 代码 背景简介 随着数字成像技术在科研、医学影像和遥感等领域的广泛应用,多页TIFF(Tag Image File Format)文件因其支持多维数据存储和高位深特性,成为存储序列图像、显微镜切片或卫星遥感数据的首选格式。然而在实际应用中,这类文件存在以下显著痛点…

Docker 部署 MySQL 8.0 完整指南:从拉取镜像到配置远程访问

目录前言一、拉取镜像二、查看镜像三、运行容器命令参数说明&#xff1a;四、查看运行容器五、进入容器内部六、修改 MySQL 配置1. 创建配置文件2. 配置内容七、重启 MySQL 服务八、设置 Docker 启动时自动启动 MySQL九、再次重启 MySQL十、授权远程访问1. 进入容器内部2. 登录…

IntelliJ IDEA 常用快捷键笔记(Windows)

前言&#xff1a;特别标注的快捷键&#xff08;Windows&#xff09;快捷键功能说明Ctrl Alt M将选中代码提取成方法Ctrl Alt T包裹选中代码块&#xff08;try/catch、if、for 等&#xff09;Ctrl H查看类的继承层次Alt 7打开项目结构面板Ctrl F12打开当前文件结构视图Ct…