Redis内存淘汰策略和过期键删除策略有哪些?

Redis 提供 8 种内存淘汰策略,以下是详细解析及场景建议:

一、核心策略解析

  1. noeviction (默认策略)

    • 机制:内存满时拒绝新写入操作,返回错误
    • 优势:绝对数据安全
    • 场景:金融交易系统、医疗数据存储
  2. allkeys-lru (推荐通用策略)

    • 机制:全局淘汰最久未使用的键
    • 优势:自动识别冷热数据
    • 场景:电商商品缓存、新闻资讯系统
  3. volatile-lru

    • 机制:仅淘汰带过期时间的LRU键
    • 优势:保护持久化数据
    • 场景:会话缓存 + 持久化数据混合存储
  4. allkeys-random

    • 机制:随机淘汰任意键
    • 优势:简单高效
    • 场景:临时数据缓存、压力测试环境
  5. volatile-random

    • 机制:随机淘汰带过期时间的键
    • 优势:有限范围内的随机淘汰
    • 场景:定时刷新缓存池

二、特殊场景策略

  1. volatile-ttl

    • 机制:优先淘汰最快过期的键
    • 优势:精确控制数据生命周期
    • 场景:限时抢购库存缓存、验证码存储
  2. allkeys-lfu (4.0+)

    • 机制:淘汰使用频率最低的键
    • 优势:长期保留高频数据
    • 场景:用户画像数据、热门推荐数据
  3. volatile-lfu (4.0+)

    • 机制:淘汰带过期时间的低频键
    • 优势:兼顾频率和有效期
    • 场景:周期性热点数据缓存

三、配置示例

# 设置最大内存为4GB
maxmemory 4gb
# 使用LFU策略(生产推荐)
maxmemory-policy allkeys-lfu

四、决策树参考

内存敏感型系统 → 选择LFU策略
时间敏感型数据 → 选择TTL策略
数据重要性分层 → 使用volatile系列
突发流量防护 → 使用allkeys-random

注:LFU策略需Redis 4.0+版本支持,建议生产环境优先使用LFU系列策略,可通过OBJECT FREQ命令实时监控键访问频率。

过期键删除策略

Redis 的过期键删除策略主要有两种,配合内存淘汰机制共同管理键生命周期:

1. 惰性删除(被动删除)

实现原理
当客户端访问某个键时,Redis 会先检查该键是否已过期。如果过期则立即删除,否则返回数据。

优势

  • 节省 CPU 资源(只在访问时检查)
  • 对正常读写无性能影响

适用场景

  • 过期键被频繁访问的场景
  • 对内存占用不敏感的长期运行系统

2. 定期删除(主动删除)

实现原理
Redis 以固定频率(默认每秒 10 次)随机扫描设置了过期时间的键:

  1. 从过期字典中随机抽取 20 个键
  2. 删除其中已过期的键
  3. 如果过期的键比例超过 25%,重复步骤 1

优势

  • 主动释放内存空间
  • 减少内存泄漏风险

适用场景

  • 存在大量长期不访问的过期键
  • 对内存敏感需要主动清理的场景

3. 内存淘汰机制(补充策略)

当内存达到 maxmemory 限制时,Redis 会根据配置执行淘汰策略,常用策略包括:

  • volatile-lru:淘汰最近最少使用的过期键
  • volatile-ttl:淘汰剩余存活时间最短的键
  • allkeys-lru:淘汰整个数据集中的最近最少使用键

策略组合
Redis 默认采用 惰性删除 + 定期删除 组合策略,配合内存淘汰机制形成三级防御:

  1. 定期删除主动清理大部分过期键
  2. 惰性删除处理漏网之鱼
  3. 内存淘汰机制兜底防止内存溢出

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

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

相关文章

【C/C++】自定义类型:结构体

文章目录 前言自定义类型:结构体1.结构体类型的声明1.1 结构体回顾1.1.1 结构的声明 1.1.2 结构体变量的创建和初始化1.2 结构的特殊声明1.3 结构的自引用 2.结构体内存对齐2.1 对⻬规则2.2 为什么存在内存对齐?2.3 修改默认对⻬数 3. 结构体传参4.结构体…

PPO算法:一种先进的强化学习策略

什么是PPO算法? PPO(Proximal Policy Optimization)是一种增强学习算法,主要应用于解决连续控制任务。PPO算法在2017年由OpenAI提出,旨在解决传统策略梯度方法在连续控制任务中面临的挑战。PPO算法通过引入一个近似目…

OpenCV实现数字水印的相关函数和示例代码

OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 实现数字水印的相关函数 用OpenCV来实现数字水印功能,需要使用一些位操作函数,我们需要先了解一下这些函数。 1. bitwise_and函数 bitwise_and函数是OpenCV中的位运算函数之一&…

基于Python的计算机科学研究话题管理系统的设计与实现 - 爬虫

标题:基于Python的计算机科学研究话题管理系统的设计与实现 - 爬虫 内容:1.摘要 本文聚焦于基于Python的计算机科学研究话题管理系统的爬虫部分。背景是随着计算机科学研究的快速发展,相关话题数据海量且分散,人工管理效率低。目的是设计并实现一个能高…

告别手动解析!借助 CodeBuddy 快速开发网页源码提取工具

作为一名长期从事 Web 开发的程序员,我们在日常工作中,时不时会需要查看网页的源代码。这么做的目的通常是为了排查前端渲染的问题、分析接口返回的数据结构,或者就是单纯地想快速提取页面中的某些信息,比如文章链接、图片地址&am…

为什么要在 input() 后加 .strip()?

strip() 是 Python 字符串的一个方法,用于去除字符串开头和结尾的空白字符(包括空格、制表符 \t、换行符 \n 等)。 为什么要在 input() 后加 .strip()? 用户在输入时,可能会不小心在开头或结尾输入空格,例…

【日撸 Java 300行】Day 14(栈)

目录 Day 14:栈 一、栈的基本知识 二、栈的方法 1. 顺序表实现栈 2. 入栈 3. 出栈 三、代码及测试 拓展: 小结 Day 14:栈 Task: push 和 pop 均只能在栈顶操作.没有循环, 时间复杂度为 O(1). 一、栈的基本知识 详细的介…

dotnet core c#调用Linux c++导出函数

1.声明C++导出函数 platform_export.h // // Created by dev on 5/6/25. //#ifndef PLATFORM_EXPORT_H #define PLATFORM_EXPORT_H #if defined(_WIN32)#ifdef LIB_EXPORTS#define LIB_API __declspec(dllimport)#else#define LIB_API __declspec(dllimport)#endif #else#ifde…

SparkSQL操作Mysql

前面的课程我们学习了如何从csv文件中读入数据,这相当于是对csv这种类型的数据的操作。那么接下来,我们一起看看,如何写Spark程序来操作mysql数据库。先来给大家介绍一下我们这节课的主要学习内容: (1)安装…

语言学中的对象语言与元语言 | 概念 / 区别 / 实例分析

注:英文引文,机翻未校。 语言学中的“对象语言”和“元语言” 刘福长 现代外语 1989年第3期(总第45期) 在阅读语言学著作时,我们有时会遇到这样两个术语:对象语言(object language&#xff0…

livenessProbe 和 readinessProbe 最佳实践

在 Kubernetes 中,livenessProbe 和 readinessProbe 是确保应用高可用性的关键机制,但配置不当可能导致应用频繁重启或流量中断。以下是配置这两个探针的最佳实践: 1. 核心区别与作用 探针类型目的失败后果livenessProbe检测应用是否 存活&…

集成管理工具Gitlab

GitLab 是一个功能强大的开源代码托管和协作平台,集成 GitLab 可以显著提升团队的开发效率。下面我将为你介绍如何集成 GitLab,包括安装配置和基本使用流程。 一、GitLab 安装与配置 GitLab 有多种安装方式,推荐使用官方 Omnibus 包安装&am…

Electron-Vue3、Electron-React、Electron-Angular打造舆情监控系统项目

Electron是一个跨平台的桌面应用开发框架,可以让我们用html css js的技术开发跨平台桌面上可以安装的软件。视频详解: Electron教程 ElectronVue跨平台桌面软件开发教程-2024年更新(大地老师) 从Electron环境搭建开始到手把手教你调试、Elect…

08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习

本实例主要讲解内容 这个Three.js示例展示了无属性几何体渲染技术,通过WebGL 2的gl_VertexID特性和伪随机数生成算法,在着色器中动态计算顶点位置和颜色,而不需要在CPU端预先定义几何体数据。 核心技术包括: WebGL 2的顶点ID特…

Ubuntu 22.04搭建OpenStreeMap地址解析服务(保姆级教程)

1.数据准备 1.1.全球数据 下载地址:https://planet.openstreetmap.org/ 1.2.特定区域的数据 下载地址:Geofabrik Download Server 2.安装必要的软件包 2.1.更新系统软件包 sudo apt updatesudo apt upgrade 2.2.安装所需要的软件包 执行下面的命…

Ubuntu 22.04.5 LTS上部署Docker及相关优化

以下是在Ubuntu 22.04.5 LTS上部署Docker及相关优化的步骤: 安装Docker 更新系统:在安装Docker之前,先确保系统是最新的,执行以下命令:sudo apt update sudo apt upgrade -y安装依赖包:安装一些必要的依赖…

React -> AI组件 -> 调用Ollama模型, qwen3:1.7B非常聪明

使用 React 搭建一个现代化的聊天界面&#xff0c;支持与 Ollama 本地部署的大语言模型进行多轮对话。界面清爽、功能完整&#xff0c;支持 Markdown 渲染、代码高亮、<think> 隐藏思考标签、流式渐进反馈、暗黑模式适配等特性。 &#x1f9e9; 核心功能亮点 ✅ 模型选择…

vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件

1. 安装依赖&#xff1a; #docx文档预览组件npm install vue-office/docx vue-demi0.14.6#excel文档预览组件npm install vue-office/excel vue-demi0.14.6#pdf文档预览组件npm install vue-office/pdf vue-demi0.14.6 vue2.6版本或以下还需要额外安装 vue/composition-api …

【应用密码学】实验五 公钥密码2——ECC

一、实验要求与目的 1.复习CCC基本概念&#xff0c;并根据实验平台提供的资料完成验证性实验。 2.编程练习&#xff1a;以书上例题小模数p为例编程实现ECC的基本运算规则。 二、实验内容与步骤记录&#xff08;只记录关键步骤与结果&#xff0c;可截图&#xff0c;但注意排版…

rust-candle学习笔记9-使用tokenizers加载qwen3分词,使用分词器处理文本

参考&#xff1a;about-pytorch&#xff0c; about-tokenizers 在魔搭社区链接下载qwen3的tokenizer.json文件 添加依赖库&#xff1a; cargo add tokenizers tokenizers库初体验&#xff1a; use tokenizers::tokenizer::{self, Result, Tokenizer};fn main() -> Resu…