Redis过期策略和持久化机制全面揭秘,教你如何合理配置

news2025/1/22 9:18:30

Redis过期策略

Redis过期策略就是指Redis如何处理设置了过期时间的键值对。Redis的过期策略有两种:定期删除和惰性删除

定期删除

定期删除,指的是Redis默认每隔100ms就随机抽取一些设置了过期时间的key,检查是否过期,如果过期就删除。这种方式可以保证过期的key不会占用太多内

但是毕竟是随机,有些key可能还是躲过一劫,也有可能导致一些key过期后还没有被删除,或者一些不常访问的key占用内存过久。所以下面两种策略就来了

惰性删除

惰性删除,指的是当访问一个key时,Redis会检查这个key是否过期,如果过期就删除并返回空。这种方式可以保证每次访问的key都是有效的

但是也有一个问题,如果用户一直不访问那些过期的key呢?还是在那占着茅坑不拉屎,下面更优秀的来了

Redis内存淘汰机制 Redis提供了8种内存淘汰策略,可以通过配置文件或者命令行来设置。这8种策略分别是:

  • noeviction:当内存不足以写入新数据时,返回错误信息,不会淘汰任何数据
  • allkeys-lru:当内存不足以写入新数据时,在所有的key中淘汰最近最少使用(LRU)的key。
  • allkeys-random:当内存不足以写入新数据时,在所有的key中随机淘汰一个key。
  • volatile-lru:当内存不足以写入新数据时,在设置了过期时间的key中淘汰最近最少使用(LRU)的key(推荐
  • volatile-random:当内存不足以写入新数据时,在设置了过期时间的key中随机淘汰一个key
  • volatile-ttl:当内存不足以写入新数据时,在设置了过期时间的key中淘汰剩余生存时间(TTL)最短的key。
  • volatile-lfu:从已设置过期时间的数据集挑选使用频率最低的数据淘汰
  • no-enviction(禁止驱逐):禁止驱逐数据,这也是默认策略。意思是当内存不足以容纳新入数据时,新写入操作就会报错,请求可以继续进行,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失。

Redis持久化方式

Redis持久化方式就是指将Redis中的数据保存到硬盘中,以防止数据丢失,这也是Redis厉害的地方。

Redis支持两种持久化方式:快照(snapshotting)和追加文件(append-only file)。

快照(snapshotting)

快照持久化是指在一定的条件下,将Redis中的所有数据一次性写入到一个RDB文件中。这个条件可以是基于时间或者基于写操作的数量来触发。例如:

save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

也可以手动执行SAVE或者BGSAVE命令来创建快照。SAVE命令会阻塞Redis服务器直到快照完成,BGSAVE命令会在后台执行快照操作(推荐)。

快照持久化的优点是:RDB文件紧凑,恢复速度快,适合做备份和灾难恢复。 缺点是可能会丢失最后一次快照之后的数据,而且快照过程可能会影响Redis的性能。比如设置5分钟快照一次,如果恰巧4分59秒时服务挂了,那就相当于丢了5分钟数据,对于要求严谨的业务还是不能接受的,后面我们统一介绍配置

追加文件(append-only file)

追加文件持久化是指将Redis执行的每一条写命令都追加到一个AOF文件中。当Redis重启时,会通过重新执行AOF文件中的命令来恢复数据。

追加文件持久化可以通过配置文件中的appendonly参数来开启,默认为no,可以设置为yes。开启后,还可以通过appendfsync参数来设置同步频率,有三个选项:

  • always:每次写入都同步到硬盘,最安全但是性能最差。
  • everysec:每秒同步一次,折中方案。
  • no:由操作系统决定何时同步,性能最好但是风险最高。

追加文件持久化的优点是数据实时性好,最多只会丢失一秒的数据,并且对Redis的性能影响小。 缺点是AOF文件会比RDB文件大,恢复速度慢,并且可能存在AOF文件过大或者写入出错的问题。

为了解决这些问题,Redis提供了AOF重写机制,可以在不影响Redis服务的情况下,对AOF文件进行压缩和优化,去除冗余的命令。AOF重写可以通过BGREWRITEAOF命令手动触发,也可以通过auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数自动触发。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

上面两行配置的含义是,Redis在每次AOF rewrite时,会记录完成rewrite后的AOF日志大小,当AOF日志大小在该基础上增长了100%后,自动进行AOF rewrite。同时如果增长的大小没有达到64mb,则不会进行rewrite。

如何合理配置

那么针对上面的策略我们实际业务中怎么选择,下面给大家一个参考

  • 如果对数据实时性要求不高,数据丢了也无所谓,可以使用RDB持久化或者不使用持久化。
  • 如果对数据实时性要求高,可以使用AOF持久化,并根据性能和安全的权衡选择同步频率。
  • 如果既要求数据实时性又要求恢复速度,可以同时使用RDB和AOF持久化,并开启混合持久化模式。
  • 如果内存空间充足,可以使用noeviction策略或者allkeys-lru策略,并为重要的key设置过期时间。
  • 如果内存空间紧张,可以使用volatile-lru策略或者volatile-ttl策略,并合理设置过期时间。

本次就介绍到这里啦,感兴趣的可以光临我的其他几篇系列文章,祝大家天天开心快乐,no bug every day!

baioqin

【深入浅出Redis 一】从版本特性到数据类型到线程模型,带你了解Redis的核心特性和应用场景!

一次redis OOM问题分析解决,rdbtools安装分析redis内存

 

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

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

相关文章

谈谈mysql——主从模式下的同步方式及半同步、MGR的部署方式

MySQL的复制模式 异步复制 MySQL的复制方式默认是异步的,主从复制涉及三个线程 master I/O master I/O线程负责写入Binlog,并将执行结果返给客户端,至于Binlog有没有被IO线程读取,读取后有没有重放,重放有没有成功&…

Linux系统:OpenSSH7.4p升级到9.0p

目录 一、理论 1.ssh 2.OpenSSH 二、实验 1.OpenSSH升级 三、问题 1.远程SSH服务器拒绝X11转发请求 2.sshd服务重启报错 四、总结 一、理论 1.ssh (1)概念 ssh 是协议,基于22端口的安全协议。 ssh中文解释是安全的shell&#xff…

使用高斯计需要注意哪些事项

高斯计(特斯拉计)是检测磁体磁感应强度的专用仪器,可以测量永磁材料的表磁,磁路间隙磁场以及磁场发生装置产生的空间磁场测量。高斯计(特斯拉计)作为一种比较精密的仪器,在使用过程中应注意以下…

【数据挖掘】推荐系统(一):协同过滤

一、说明 推荐系统是一种计算机程序或算法,用于预测用户对特定项目的兴趣度,并根据这些预测向用户提供个性化推荐。这种系统通常使用大量数据来分析用户的行为和偏好,以找出潜在的喜好和兴趣。推荐系统可以应用于电子商务、社交媒体、影视娱乐…

Java 项目 - SpringBoot+Vue的智慧养老系统

文章目录 1.研究背景2. 技术栈3.系统分析4系统设计4.1 软件功能模块设计4.2数据库设计与实现 5系统详细设计5.1系统功能模块5.2后台登录功能5.2.1管理员功能 源码下载地址 1.研究背景 困扰管理层的许多问题当中,智慧养老平台一定是养老平台不敢忽视的一块。但是管理好智慧养老…

浅浅记录下fortinet vpn链接遇到的一些问题

一、前言 有点问题的win7系统 一、fortinet vpn无法安装问题 说是缺少KB3033929。 首先激活这个系统,怎么激活的这里省略了, 然后下载了一个360修复了一下系统。 二、fortinet vpn安装 刚开始安装的forticlientVPNSetup_7.0.5,安装完成。…

sd卡自动删除的数据如何恢复?数据重获新生的五种方法

用户咨询案例分享: 咨询1:请问SD卡为什么会自动删除里头的文件呀?怎么找回!!! 咨询2:SD卡不知道为什么突然自动删除什么都没有了!还能恢复吗 更多...... 在日常生活中,我们经常使用S…

【电子量产工具】5.页面系统

文章目录 前言一、页面系统分析二、页面数据结构抽象三、底层代码 main_page.c四、页面管理器五、测试程序测试效果总结 前言 最近看了 电子量产工具 这个项目,本专栏是对该项目的一个总结。 一、页面系统分析 页面系统是指在软件应用或网站中,将功能和…

Linux基础服务8——cobbler批量装机

文章目录 一、基本了解1.1 配置文件1.2 数据目录1.3 日志文件1.4 常用命令 二、普通安装2.1 服务端操作2.2 客户端操作 三、定制安装3.1 手动安装3.2 脚本安装(推荐) 一、基本了解 cobbler简介: Cobbler是一个Linux服务器安装的服务&#xff…

Django_MVT(二)

目录 一、MVT简介 二、M-模型类 1. 定义模型类 2. 迁移 2.1 生成迁移文件命令如下: 2.2 执行迁移命令如下: 3. 数据基础操作 三、V-视图 1.定义视图 2.配置URLconf 访问服务器 四、T-模板 创建模板文件 定义模板 视图调用模板 视图调用模…

vue el-table的每行操作el-button添加单独的loading效果实现

vue el-table的每行操作el-button添加单独的loading效果实现 效果图&#xff1a;实现代码&#xff1a;结语 效果图&#xff1a; 实现代码&#xff1a; <tamplate><el-table :data"list" ><el-table-column fixed"right" label"操作&q…

Application Context的继承关系

Application Context他们关系很复杂&#xff0c;紫色是借口&#xff0c;浅绿色是抽象类&#xff0c;我们要创建继承&#xff0c;要创建实现。第一个class path代表未加载路径&#xff0c;rouces下都是未加载路径.FileSystem代表文件系统&#xff0c;代表则磁盘。 看看文件怎么写…

Gof23设计模式之装饰者模式

1.概述 定义 指在不改变现有对象结构的情况下&#xff0c;动态地给对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。 例子 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加…

抖音seo矩阵源码*开发搭建*代码打包部署(开源)分享

1一、 抖音seo矩阵源码开发搭建&#xff08;支持二开&#xff09;概述 抖音SEO矩阵指的是一系列通过搜索引擎优化&#xff08;SEO&#xff09;技术和策略来提升抖音账号在搜索结果中排名的方法和工具。在抖音上&#xff0c;用户可以通过搜索关键词来查找与其相关的视频和账号…

网络子系统1

网络子系统 1 ISO/OSI和TCP/IP参考模型 国际标准化组织&#xff09;设计了一种参考模型&#xff0c;定义了组成网络的各个层。该模型由7层组成&#xff0c;称为OSI&#xff08;Open Systems Interconnection&#xff0c;开放系统互连&#xff09;模型&#xff0c;如图所示。其…

Android耗电优化需要注意的要点

作者&#xff1a;小墙程序员 在应用开发中&#xff0c;耗电是我们需要关注的重点。但是&#xff0c;开始进行耗电优化时&#xff0c;我们常常感到无从下手。这篇文章将介绍耗电优化的相关要点&#xff0c;让我们优化时有一个方向。 传感器 大多数Android设备都内置传感器&…

【停用词】NLP中的停用词怎么获取?我整理了6种方法

文章目录 一、停用词介绍二、停用词应用场景2.1 提取高频词2.2 词云图 三、停用词获取方法3.1 自定义停用词3.2 用wordcloud调取停用词3.3 用nltk调取停用词3.3.1 nltk中文停用词3.3.2 nltk英文停用词 3.4 用sklearn调取停用词3.5 用gensim调取停用词3.6 用spacy调取停用词 一、…

select语句与CSP模型~Go进阶

select语句 select 是 Go 中的一个控制结构。select 语句类似于 switch 语句&#xff0c;但是select会随机执行一个可运行的case。如果没有case可运行&#xff0c;它将阻塞&#xff0c;直到有case可运行。 语法结构 select语句的语法结构和switch语句很相似&#xff0c;也有…

【UGUI学习笔记】Rect Transform

文章目录 Rect Transform锚点和轴心轴心点锚点 Rect Transform 锚点和轴心 在上图中&#xff0c;中心位置的蓝色同心圆代表了轴心点&#xff0c;而四角花瓣的图形代表了实体的锚点。 Attribute含义轴心点 Pivot默认实体的几何中心处&#xff0c;轴心代表了对物体在空间上的坐…

安装git工具

下载安装地址&#xff1a; Git - Downloading Package (git-scm.com) 命令安装&#xff1a;创建文件夹下载路径 启动powershell 输入命令&#xff1a;winget install --id Git.Git -e --source winget 等待下载安装