【redis】redis内存管理,过期策略与淘汰策略
一:Redis 的过期删除策略及处理流程如下:
1. 过期删除策略
Redis 通过以下两种策略删除过期键:
1.1 惰性删除
- 触发时机:当客户端访问某个键时,Redis 会检查该键是否过期。
- 执行流程:
- 客户端请求访问键。
- Redis 检查键的过期时间。
- 如果键已过期,Redis 删除该键并返回空;如果未过期,返回键值。
1.2 定期删除
- 触发时机:Redis 定期随机抽取部分键检查是否过期。
- 执行流程:
- Redis 从设置了过期时间的键中随机抽取一部分。
- 检查这些键是否过期。
- 删除已过期的键。
- 如果过期键比例超过一定阈值,重复该过程。
2. 处理流程
Redis 处理过期键的流程结合了惰性删除和定期删除:
-
客户端访问:
- 客户端请求访问键时,Redis 先检查键是否过期,若过期则删除并返回空。
-
定期检查:
- Redis 定期随机抽取部分键检查过期情况,删除已过期的键。
- 如果过期键比例较高,继续检查更多键。
-
内存回收:
- 通过惰性删除和定期删除,Redis 逐步回收过期键占用的内存。
3. 配置参数
- hz:控制定期删除的频率,默认 10,表示每秒执行 10 次检查。
- maxmemory-samples:设置每次检查时随机抽取的键数量,默认 5。
4. 总结
- 惰性删除:在访问时检查并删除过期键。
- 定期删除:定期随机检查并删除过期键。
这两种策略共同确保 Redis 高效管理内存,避免过期键占用过多资源。
在 Redis 中,缓存淘汰策略 和 过期策略 是两种不同的机制,但它们共同作用于缓存数据的管理。以下是对 LRU 和 LFU 缓存淘汰策略的区别,以及它们与过期策略的应用场景的详细解读。
二、缓存淘汰策略:LRU 和 LFU 的区别
1. LRU(Least Recently Used,最近最少使用)
- 原理:优先淘汰最近最少被访问的数据。
- 实现方式:Redis 使用近似 LRU 算法,通过随机采样一部分键,从中淘汰最近最少使用的键。
- 特点:
- 关注数据的访问时间。
- 适合访问模式有明显热点数据的场景。
- 适用场景:
- 热点数据缓存(如新闻、社交媒体热门内容)。
- 需要保留最近访问数据的场景。
2. LFU(Least Frequently Used,最不常用)
- 原理:优先淘汰访问频率最低的数据。
- 实现方式:Redis 记录每个键的访问频率,淘汰访问次数最少的键。
- 特点:
- 关注数据的访问频率。
- 适合访问模式较为均匀的场景。
- 适用场景:
- 访问频率差异较大的场景(如推荐系统、广告系统)。
- 需要保留高频访问数据的场景。
3. LRU 和 LFU 的区别
特性 | LRU | LFU |
---|---|---|
关注点 | 数据的访问时间 | 数据的访问频率 |
适用场景 | 有明显热点数据的场景 | 访问频率差异较大的场景 |
优点 | 简单高效,适合短期热点数据 | 更精准,适合长期高频数据 |
缺点 | 可能误删高频但近期未访问的数据 | 需要额外记录访问频率,开销较大 |
三、缓存淘汰策略与过期策略的结合应用
在实际应用中,缓存淘汰策略和过期策略通常需要结合使用,以满足不同的业务需求。
1. 热点数据缓存
- 过期策略:为热点数据设置较长的过期时间。
- 淘汰策略:使用
allkeys-lru
,优先保留最近访问的热点数据。 - 场景:新闻、社交媒体热门内容。
2. 临时数据缓存
- 过期策略:为临时数据(如验证码、会话)设置较短的过期时间。
- 淘汰策略:使用
volatile-ttl
,优先淘汰即将过期的数据。 - 场景:验证码、会话缓存。
3. 冷数据清理
- 过期策略:为冷数据设置过期时间。
- 淘汰策略:使用
volatile-lfu
,优先淘汰访问频率低的冷数据。 - 场景:历史数据、低频访问数据。
4. 不允许数据丢失的场景
- 过期策略:不设置过期时间,或设置较长的过期时间。
- 淘汰策略:使用
noeviction
,确保数据不被淘汰。 - 场景:金融、交易系统。
四、总结
1. LRU 和 LFU 的选择
- 如果业务有明显的热点数据,选择 LRU。
- 如果业务需要关注数据的访问频率,选择 LFU。
2. 过期策略的选择
- 如果数据有明确的生命周期,设置 过期时间。
- 如果需要及时清理过期键,启用 定期删除。
3. 结合使用
- 根据业务特点,合理配置 缓存淘汰策略 和 过期策略,以优化 Redis 的性能和资源利用率。
通过合理选择策略,可以有效提升 Redis 的缓存命中率和系统性能。
相关文章:
【redis】redis内存管理,过期策略与淘汰策略
一:Redis 的过期删除策略及处理流程如下: 1. 过期删除策略 Redis 通过以下两种策略删除过期键: 1.1 惰性删除 触发时机:当客户端访问某个键时,Redis 会检查该键是否过期。执行流程: 客户端请求访问键。…...

RabbitMQ学习—day6—死信队列与延迟队列
目录 死信队列 1. 死信的概念 2. 死信的来源 实战演练 1. 消息TTL过期 2. 队列达到最大长度 3. 消息被拒绝 延迟队列 概念 使用场景 TTL的两种设置 死信队列 1. 死信的概念 1.1 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的…...

seacmsv9联合注入数据以及绕过 ORDERBY
seacmsv9联合注入数据 php源码 <?php session_start(); require_once("../../include/common.php"); $id (isset($gid) && is_numeric($gid)) ? $gid : 0; $page (isset($page) && is_numeric($page)) ? $page : 1; $type (isset($type) …...
day58 第十一章:图论part08
拓扑排序精讲 关键: 先找到入度为0的节点,把这些节点加入队列/结果,然后依次循环再找。 #include <iostream> #include <vector> #include <queue> #include <unordered_map> using namespace std; int main() {int …...

网络安全-openssl工具
OpenSSl是一个开源项目,包括密码库和SSL/TLS工具集。它已是在安全领域的事实标准,并且拥有比较长的历史,现在几乎所有的服务器软件和很多客户端都在使用openssl,其中基于命令行的工具是进行加密、证书管理以及测试最常用到的软件。…...
Java面试第六山!《MySQL基础知识点》
一、引言 MySQL 作为一款广泛使用的开源关系型数据库管理系统,在软件开发领域占据着重要地位。无论是小型项目还是大型企业级应用,都能看到 MySQL 的身影。今天就来和大家分享 MySQL 的相关知识,帮助大家更好地应对日常开发和面试。 二、My…...
云计算中的API网关是什么?为什么它很重要?
在云计算架构中,API网关(API Gateway)是一个重要的组件,主要用于管理、保护和优化不同服务之间的接口(API)通信。简单来说,API网关就像是一个中介,它充当客户端和后端服务之间的“桥…...
【WebGL】fbo双pass案例
双pass渲染案例(离线渲染一个三角面,然后渲染到一个占满屏幕的矩阵上) 离线渲染如何需要开启深度测试的话,需要额外操作,这里不展开 <!DOCTYPE html> <html lang"en"><head><meta ch…...

Unity面板介绍_层级面板(23.1.1)
一、Inspector(检视面板) 显示当前选定游戏对象附加的组件及其属性信息。为重要游戏物体选择图标 二、面板详情...
详解Nginx 配置
一、Nginx 介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发,自 2004 年发布以来,凭借其高性能、低内存消耗、高并发处理能力等特点…...

数据库系统概念
1. 绪论 数据库的基本概念: 数据(data): 数据库中存储的基本对象, 可以是文字, 声音, 图片, 视频等。 数据库(DB): 概括来说就是永久存储, 有组织, 可共享的大量数据的集合。 数据库管理系统(DBMS): 和操作系统一样是计算机基础软件, 主要有数据定义语言(DDL, 对数据对象的组…...

51单片机学习之旅——定时器
打开软件 1与其它等于其它,0与其它等于0 1或其它等于1,0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作,高四位保持,低四位清零,高四位定时器1,低四位定时器0 TMODTMOD|0x01;//0x010000 0…...

一台服务器将docker image打包去另一天服务器安装这个镜像
一台服务器将docker image打到去另一天服务器安装这个镜像 1. 打包2.另一台服务器执行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一台服务器执行 docke…...
QT串口通信之二,实现单个温湿度传感器数据的采集(采用Qt-modbus实现)
接上 QT串口通信之一,实现单个温湿度传感器数据的采集 上述文章中用QSerialPort实现了温湿度传感器的采集,实际上比较麻烦的,因为需要自定义解析帧, 接下来,用Qt-modbus-封装度更高的协议,来实现温湿度的采集; #include "MainWindow.h" #include "ui_M…...

基于SpringBoot的校园消费点评管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

【小沐学Java】VSCode搭建Java开发环境
文章目录 1、简介2、安装VSCode2.1 简介2.2 安装 3、安装Java SDK3.1 简介3.2 安装3.3 配置 4、安装插件Java Extension Pack4.1 简介4.2 安装4.3 配置 结语 1、简介 2、安装VSCode 2.1 简介 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在桌面上…...

《操作系统 - 清华大学》8 -4:进程管理:进程控制结构
深度剖析进程控制块:操作系统进程管理的核心关键 在操作系统的复杂体系中,进程控制块(PCB)是实现高效进程管理的关键所在。接下来,将从多个维度深入剖析进程控制块,帮助更好地理解其在操作系统中的重要作用…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
C++ Boost面试题大全及参考答案
目录 boost::thread_group 如何实现批量线程管理? 解释 boost::asio 中 proactor 模式的设计原理 使用 boost::atomic 实现无锁环形缓冲区 boost::mutex 与 std::mutex 在异常安全上的差异 如何用 boost::condition_variable 实现生产者 - 消费者模型 当 boost::shared_p…...
关于Transparent native-to-ascii conversion
1、功能 自动转换ASCII编码,即在文件系统上,文件的编码格式为ascii编码,在编辑器(idea/pycharm)中,其展现结果为配置的编码格式,仅展现方便阅读 使用UTF-8并勾选自动转换ASCII编码结果&#x…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...

安全领域新突破:可视化让隐患无处遁形
在安全领域,隐患就像暗处的 “幽灵”,随时可能引发严重事故。传统安全排查手段,常常难以将它们一网打尽。你是否好奇,究竟是什么神奇力量,能让这些潜藏的隐患无所遁形?没错,就是可视化技术。它如…...