【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…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
