Redis 内存管理

Redis 内存管理

1. Redis 给缓存数据设置过期时间的作用

给缓存数据设置过期时间(TTL, Time-To-Live)有以下几个重要作用:

(1) 自动释放内存

  • 避免缓存数据无限增长,导致 Redis 内存溢出
  • 例如,在 会话管理、短连接信息、临时令牌 等场景下,设置过期时间可以自动清理数据,避免占用大量内存。

(2) 提高缓存的实时性

  • 设置较短的 TTL 让数据 保持新鲜,保证用户获取的是最新的数据。
  • 例如,热点新闻、秒杀活动商品库存,需要定期更新。

(3) 限制数据的生命周期

  • 适用于 验证码、用户 Token 等数据,超时后自动失效,提高安全性
  • 例如,验证码有效期 5 分钟,超时后自动删除,防止恶意重复使用。

(4) 提高缓存命中率

  • 如果数据频繁变化,不设置过期时间,可能导致大量 冷数据 长期占用内存,影响缓存命中率。
  • 通过 TTL 控制数据生命周期,保证 Redis 主要存储热点数据。

2. Redis 是如何判断数据是否过期的?

Redis 通过 两种方式 判断数据是否过期:

(1) 访问 Key 时检查(惰性删除)

  • **机制:**当客户端访问一个 Key(如 GET key)时,Redis 检查其过期时间:
    • 如果 Key 已过期,立即删除,并返回 nil 或默认值。
    • 如果 Key 未过期,则正常返回数据。
  • 优点:减少 CPU 资源占用,仅对访问的数据进行检查。
  • 缺点:如果一个 Key 长期不被访问,即使已经过期,也不会被删除,可能导致 内存占用过高

(2) 定期扫描过期 Key(定期删除)

  • **机制:**Redis 每 100ms 进行一次过期检查:
    1. 随机抽取部分 Key(默认 20 个)。
    2. 检查是否过期,如果过期就删除。
    3. 如果删除的 Key 超过 25%(默认阈值),则继续下一轮检查,避免过期 Key 堆积。
  • 优点:可以主动清理一部分过期数据,减少内存占用。
  • 缺点无法保证所有过期 Key 及时删除,仍可能导致部分过期数据滞留。

3. Redis 过期 Key 的删除策略

Redis 采用 三种删除策略 结合使用,以平衡 性能内存占用

删除策略触发时机优点缺点
惰性删除访问 Key 时检查CPU 资源占用低,只检查访问的数据冷数据不会被清理,可能导致内存占满
定期删除每 100ms 扫描部分 Key主动清理一部分过期 Key,避免过期数据堆积无法清理所有过期 Key,仍可能占用大量内存
内存淘汰(Eviction)内存满时触发确保 Redis 可用,释放空间给新数据可能删除热点数据,影响缓存命中率

4. Redis 的内存淘汰策略(Eviction Policy)

如果过期 Key 没有及时删除,导致 内存达到 maxmemory 限制,Redis 会采用 内存淘汰策略 释放空间,主要有三类:

(1) 直接拒绝写入

  • noeviction(默认策略):
    • 机制:当 Redis 内存满了拒绝新的写入请求,返回错误。
    • 适用场景:适用于 不能丢失数据 的场景(如金融交易数据)。
    • 缺点:可能导致系统不可用。

(2) 仅淘汰带过期时间(TTL)的 Key

  • volatile-lru:淘汰 带 TTL 的 Key,按 LRU(最近最少使用)删除。
  • volatile-lfu:淘汰 带 TTL 的 Key,按 LFU(最少使用)删除。
  • volatile-random随机删除 带 TTL 的 Key。
  • volatile-ttl:优先删除 TTL 最短的 Key

(3) 淘汰所有 Key

  • allkeys-lru:在 所有 Key 中,删除 最近最少使用(LRU) 的 Key。
  • allkeys-lfu:在 所有 Key 中,删除 最少使用(LFU) 的 Key。
  • allkeys-random随机删除 任意 Key。

淘汰策略对比

策略适用范围适用场景优点缺点
noeviction所有 Key不能丢失数据的业务数据绝对安全可能导致 Redis 无法写入
allkeys-lru所有 Key普通缓存(如 Web 缓存)保留热点数据LRU 计算有额外开销
volatile-lru仅带 TTL有过期时间的缓存保留热点缓存数据TTL 过少时,可能无 Key 可删除
allkeys-random所有 Key低优先级缓存简单高效可能误删热点数据
volatile-random仅带 TTL无访问规律的缓存低计算成本命中率低
volatile-ttl仅带 TTL定期缓存数据优先删除即将过期的数据TTL 设定不合理可能影响命中率
allkeys-lfu所有 Key热点数据变化快优先保留高频访问数据计算比 LRU 高
volatile-lfu仅带 TTL高频访问缓存结合访问频率和 TTL 进行优化计算比 LRU 高

5. 综述

  1. 为什么 Redis 需要设置过期时间?
    • 释放内存,防止数据无限增长。
    • 保证数据实时性,避免使用陈旧数据。
    • 提高缓存命中率,让 Redis 保留热点数据。
    • 符合业务需求(如验证码、Token 需要自动失效)。
  2. Redis 如何判断 Key 是否过期?
    • 惰性删除:访问 Key 时检查,若过期则删除。
    • 定期删除:每 100ms 随机检查部分 Key,并删除过期 Key。
  3. Redis 过期 Key 如何删除?
    • 惰性删除 + 定期删除 + 内存淘汰策略 结合,平衡 性能内存占用
  4. Redis 如何在内存满时清理数据?
    • 默认拒绝写入(noeviction
    • 基于 LRU/LFU/TTL 的内存淘汰策略
    • 随机淘汰或基于访问频率、TTL 进行优化

通过合理设置 过期时间 + 淘汰策略,可以让 Redis 高效管理内存,保证缓存数据的 可用性和实时性

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

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

相关文章

调用百度api实现语音识别(python)

该代码实现了一个企业级的语音识别解决方案,通过调用百度语音识别API,实现实时录音识别和对已有音频语音识别功能。 百度智能云:请自行访问百度智能云,开通免费的语音识别功能,获取API_KEY和SECRET_KEY。操作按照百度流程即可,可免费申请。 首先,配置下百度API和描述下错…

Python实现小红书app版爬虫

简介:由于数据需求的日益增大,小红书网页版已经不能满足我们日常工作的需求,为此,小编特地开发了小红书手机版算法,方便大家获取更多的数据,提升工作效率。 手机版接口主要包括:搜素&#xff0…

【AndroidRTC-11】如何理解webrtc的Source、TrackSink

Android-RTC系列软重启,改变以往细读源代码的方式 改为 带上实际问题分析代码。增加实用性,方便形成肌肉记忆。同时不分种类、不分难易程度,在线征集问题切入点。 问题1:如何理解VideoSource、VideoTrack&VideoSink三者的关系…

Windows安装Rust环境(详细教程)

一、 安装mingw64(C语言环境) Rust默认使用的C语言依赖Visual Studio,但该工具占用空间大安装也较为麻烦,可以选用轻便的mingw64包。 1.1 安装地址 (1) 下载地址1-GitHub:Releases niXman/mingw-builds-binaries GitHub (2) 下载地址2-W…

英伟达黄仁勋谈人工智能趋势,首提代理式AI,后续机器人将登场

近日,英伟达 GTC 2025 大会主题演讲中,英伟达 CEO 黄仁勋再次身穿皮衣登场。黄仁勋一上来就提到了 AI 发展的未来,现在我们处于生成式 AI(Generative AI)阶段,但根据黄仁勋的路线图,我们将迈向一…

LCR 187. 破冰游戏(python3解法)

难度:简单 社团共有 num 位成员参与破冰游戏,编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target,从 0 号成员起开始计数,排在第 target 位的成员离开圆桌,且成员离开后从下一个成员开始计数…

水星(MERCURY)监控初始化的恢复和转码方法

水星(MERCURY)的安防监控恢复了很多,其嵌入式文件系统也一直迭代更新。做为数据恢复从业者每天处理最多的就是恢复数据,但是有的时候业务的需要我们不仅仅恢复出数据,还需要能够转码成通用的MP4类文件并要求画面和声音实现“同步”。 故障存…

基于SpringBoot的实现的客户关系管理系统(CRM)(源码+数据库)

464客户关系管理系统(CRM),主要功能如下 【后台功能】 权限管理模块: 包括系统的登录与注册功能 用户管理模块: 基于RBAC的权限模型设计, 实现分配角色的功能功能 客户管理模块: 对客户信息进行新增 修改 删除 查看 联络信息管理模块: 对联络…

关于网络的一点知识(持续更新)

1、IP地址和子网掩码、端口号: IP地址是设备在网络上的地址,相当于一栋房子的门牌号。子网掩码相当于房子所在的街道。同一条街道的房子间是通过街道直通的,主人可以互相拜访。 举个例子,如下图所示。 说明:将两台设备的IP和子网掩码转化为二进制,然后将各自的IP地址和…

Python---数据分析(Pandas八:二维数组DataFrame数据操作一: 数据清洗,数据转换)

一、 数据清洗 1.1、 isnull() 用于检测 DataFrame 中的缺失值,它会返回一个相同形状的布尔型 DataFrame,其中每个元素表示原始 DataFrame 中相应位置的元素是否是缺失 值。 import pandas as pd import numpy as np# 创建一个包含缺失值的 DataFrame …

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者,正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案,一个集高效性、智能化、画质增强于一体的创新解决方案,旨在重塑智能汽车图像画质的新标准,并支持前…

Flask接口开发--GET接口

安装Flask 1.安装命令: pip3 install Flask2.查看Flask版本: pip3 show flask如图我的Flask版本号是2.0.3 项目创建 1、在PyCharm中,我们点击左上方的 file,选择 New Project,创建一个Flask项目。(Py…

应用权限组列表

文章目录 使用须知位置相机麦克风通讯录日历运动数据身体传感器图片和视频音乐和音频跨应用关联设备发现和连接剪切板文件夹文件(deprecated) 使用须知 在申请目标权限前,建议开发者先阅读应用权限管控概述-权限组和子权限,了解相关概念,再合…

Python为Word文档添加书签并打包成exe

背景简述 由于一些工作场景,需要从多个Word文档中找到出现的关键词,并阅读关键词的上下文内容。文件可能几十个,手动操作太要命了。所以python尝试处理。 目录 背景简述思路第一步、功能实现结果验证 第二步、打包成exe2-1、基础准备2-2、打…

【MYSQL】索引和事务

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 本期内容讲解 MySQL 中的索引和事务,在学习的过程中,我们需要经常问自己为什么 文章目录 1. 索…

2021年蓝桥杯第十二届CC++大学B组真题及代码

目录 1A:空间(填空5分_单位转换) 2B:卡片(填空5分_模拟) 3C:直线(填空10分_数学排序) 4D:货物摆放(填空10分_质因数) 5E&#xf…

PicGo安装与配置-Gitee图床

1、 前言 平时使用Typora写文章,上传文章到第三方平台上去都要把图片一个一个上传上去,于是我就百度了有没有什么方法可以省略这一步骤,我发现Typora可以用PicGo+Gitee图床方式,这个挺容易的,我把安装的过程在此记录下来。 PicGo是一个用于快速上传图片并获取图片 URL 链…

html css js网页制作成品——HTML+CSS+js迪奥口红网站网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…

重学Java基础篇—如何优雅的删除HashMap元素

在Java中优雅地删除HashMap元素需要注意遍历时的安全性和代码的简洁性。 以下是几种推荐的方法: 1. 使用迭代器遍历并删除(传统方式) 在遍历时通过迭代器的remove() 方法删除元素,避免ConcurrentModificationException异常。 H…

26考研——图_图的遍历(6)

408答疑 文章目录 三、图的遍历图的遍历概述图的遍历算法的重要性图的遍历与树的遍历的区别图的遍历过程中的注意事项避免重复访问遍历算法的分类遍历结果的不唯一性 广度优先搜索广度优先搜索(BFS)概述BFS 的特点广度优先遍历的过程示例图遍历过程 BFS …