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

【redis】redis内存管理,过期策略与淘汰策略

一:Redis 的过期删除策略及处理流程如下:

1. 过期删除策略

Redis 通过以下两种策略删除过期键:

1.1 惰性删除
  • 触发时机:当客户端访问某个键时,Redis 会检查该键是否过期。
  • 执行流程
    1. 客户端请求访问键。
    2. Redis 检查键的过期时间。
    3. 如果键已过期,Redis 删除该键并返回空;如果未过期,返回键值。
1.2 定期删除
  • 触发时机:Redis 定期随机抽取部分键检查是否过期。
  • 执行流程
    1. Redis 从设置了过期时间的键中随机抽取一部分。
    2. 检查这些键是否过期。
    3. 删除已过期的键。
    4. 如果过期键比例超过一定阈值,重复该过程。

2. 处理流程

Redis 处理过期键的流程结合了惰性删除和定期删除:

  1. 客户端访问

    • 客户端请求访问键时,Redis 先检查键是否过期,若过期则删除并返回空。
  2. 定期检查

    • Redis 定期随机抽取部分键检查过期情况,删除已过期的键。
    • 如果过期键比例较高,继续检查更多键。
  3. 内存回收

    • 通过惰性删除和定期删除,Redis 逐步回收过期键占用的内存。

3. 配置参数

  • hz:控制定期删除的频率,默认 10,表示每秒执行 10 次检查。
  • maxmemory-samples:设置每次检查时随机抽取的键数量,默认 5。

4. 总结

  • 惰性删除:在访问时检查并删除过期键。
  • 定期删除:定期随机检查并删除过期键。

这两种策略共同确保 Redis 高效管理内存,避免过期键占用过多资源。
在 Redis 中,缓存淘汰策略过期策略 是两种不同的机制,但它们共同作用于缓存数据的管理。以下是对 LRULFU 缓存淘汰策略的区别,以及它们与过期策略的应用场景的详细解读。


二、缓存淘汰策略:LRU 和 LFU 的区别

1. LRU(Least Recently Used,最近最少使用)

  • 原理:优先淘汰最近最少被访问的数据。
  • 实现方式:Redis 使用近似 LRU 算法,通过随机采样一部分键,从中淘汰最近最少使用的键。
  • 特点
    • 关注数据的访问时间。
    • 适合访问模式有明显热点数据的场景。
  • 适用场景
    • 热点数据缓存(如新闻、社交媒体热门内容)。
    • 需要保留最近访问数据的场景。

2. LFU(Least Frequently Used,最不常用)

  • 原理:优先淘汰访问频率最低的数据。
  • 实现方式:Redis 记录每个键的访问频率,淘汰访问次数最少的键。
  • 特点
    • 关注数据的访问频率。
    • 适合访问模式较为均匀的场景。
  • 适用场景
    • 访问频率差异较大的场景(如推荐系统、广告系统)。
    • 需要保留高频访问数据的场景。

3. LRU 和 LFU 的区别

特性LRULFU
关注点数据的访问时间数据的访问频率
适用场景有明显热点数据的场景访问频率差异较大的场景
优点简单高效,适合短期热点数据更精准,适合长期高频数据
缺点可能误删高频但近期未访问的数据需要额外记录访问频率,开销较大

三、缓存淘汰策略与过期策略的结合应用

在实际应用中,缓存淘汰策略和过期策略通常需要结合使用,以满足不同的业务需求。

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

拓扑排序精讲 关键&#xff1a; 先找到入度为0的节点&#xff0c;把这些节点加入队列/结果&#xff0c;然后依次循环再找。 #include <iostream> #include <vector> #include <queue> #include <unordered_map> using namespace std; int main() {int …...

网络安全-openssl工具

OpenSSl是一个开源项目&#xff0c;包括密码库和SSL/TLS工具集。它已是在安全领域的事实标准&#xff0c;并且拥有比较长的历史&#xff0c;现在几乎所有的服务器软件和很多客户端都在使用openssl&#xff0c;其中基于命令行的工具是进行加密、证书管理以及测试最常用到的软件。…...

Java面试第六山!《MySQL基础知识点》

一、引言 MySQL 作为一款广泛使用的开源关系型数据库管理系统&#xff0c;在软件开发领域占据着重要地位。无论是小型项目还是大型企业级应用&#xff0c;都能看到 MySQL 的身影。今天就来和大家分享 MySQL 的相关知识&#xff0c;帮助大家更好地应对日常开发和面试。 二、My…...

云计算中的API网关是什么?为什么它很重要?

在云计算架构中&#xff0c;API网关&#xff08;API Gateway&#xff09;是一个重要的组件&#xff0c;主要用于管理、保护和优化不同服务之间的接口&#xff08;API&#xff09;通信。简单来说&#xff0c;API网关就像是一个中介&#xff0c;它充当客户端和后端服务之间的“桥…...

【WebGL】fbo双pass案例

双pass渲染案例&#xff08;离线渲染一个三角面&#xff0c;然后渲染到一个占满屏幕的矩阵上&#xff09; 离线渲染如何需要开启深度测试的话&#xff0c;需要额外操作&#xff0c;这里不展开 <!DOCTYPE html> <html lang"en"><head><meta ch…...

Unity面板介绍_层级面板(23.1.1)

一、Inspector(检视面板) 显示当前选定游戏对象附加的组件及其属性信息。为重要游戏物体选择图标 二、面板详情...

详解Nginx 配置

一、Nginx 介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发&#xff0c;自 2004 年发布以来&#xff0c;凭借其高性能、低内存消耗、高并发处理能力等特点&#xf…...

数据库系统概念

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

51单片机学习之旅——定时器

打开软件 1与其它等于其它&#xff0c;0与其它等于0 1或其它等于1&#xff0c;0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作&#xff0c;高四位保持&#xff0c;低四位清零&#xff0c;高四位定时器1&#xff0c;低四位定时器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的校园消费点评管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

【小沐学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 是一个轻量级但功能强大的源代码编辑器&#xff0c;可在桌面上…...

《操作系统 - 清华大学》8 -4:进程管理:进程控制结构

深度剖析进程控制块&#xff1a;操作系统进程管理的核心关键 在操作系统的复杂体系中&#xff0c;进程控制块&#xff08;PCB&#xff09;是实现高效进程管理的关键所在。接下来&#xff0c;将从多个维度深入剖析进程控制块&#xff0c;帮助更好地理解其在操作系统中的重要作用…...

RPC 框架项目剖析

RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节&#xff0c;此项目基于cpp语言 大概三千行左右&#xff0c;用于学习目的。 项目链接&#xff1a;rpc项目 项目底层类 1.抽象消息类 描述&#xff1a; 各种消息的基类 属性&#xff1a; 消息id&#xff0c;消息类型…...

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编码&#xff0c;即在文件系统上&#xff0c;文件的编码格式为ascii编码&#xff0c;在编辑器&#xff08;idea/pycharm&#xff09;中&#xff0c;其展现结果为配置的编码格式&#xff0c;仅展现方便阅读 使用UTF-8并勾选自动转换ASCII编码结果&#x…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...