Redis持久化的三种方式(RDB、AOF和混合)
Redis持久化的三种方式(RDB、AOF和混合)
目录
- Redis持久化的三种方式(RDB、AOF和混合)
- 介绍
- RDB示例
- 1.配置文件
- 2.触发 RDB 快照保存
- 3.验证
- AOF示例
- 1.配置文件
- 2.校验
- 混合型持久化存储
- 配置文件
介绍
Redis数据主要存储与内存中,因此如果服务器意外重启、宕机、崩溃,那么数据就会全部丢失。而Redis持久化的意义就是为了当发生这些灾难时找回数据。
Redis 提供了两种主要的持久化方式:RDB(Redis Database)和 AOF(Append Only File)
- RDB(Redis Database):
- RDB 持久化通过创建一个名为
dump.rdb的二进制文件来保存 Redis 数据库在某个时间点的快照。在 Redis 重启时,会加载这个文件来恢复数据。
- RDB 持久化通过创建一个名为
- AOF(Append Only File):
- AOF 持久化通过记录服务器接收到的每一个写操作命令(如 set、del 等),以追加的方式写入到一个 AOF 文件中。Redis 重启时会通过重新执行 AOF 文件中的命令来恢复数据。
RDB示例
1.配置文件
在redis.conf中修改rdb备份文件的名称,默认为dump.rdb
dbfilename dump.rdb
save修改触发快照条件
save 900 1 # 900 秒内至少有 1 个键被改变
save 300 10 # 300 秒内至少有 10 个键被改变
save 60 10000 # 60 秒内至少有 10000 个键被改变
dir设置 RDB 文件的存储目录,默认为 Redis 服务器的当前工作目录
dir /data
示例:
dbfilename dump.rdb
save 900 1
dir /data
2.触发 RDB 快照保存
如果没有save触发条件,也可以自己手动触发快照保存
linux环境:
redis-cli SAVE
python环境:
import redis # 连接到Redis服务器
r = redis.Redis(host='localhost', port=6379, db=0) r.bgsave() # 触发RDB快照的保存
3.验证
这里我们设置了自动保存快照,并添加两个数据

然后重启服务器,再次查询keys *,数据还在

- RDB优势:
- 二进制存储,速度极快,磁盘空间占用小
- 在生成RDB快照时,Redis会fork出一个子进程来负责写入磁盘工作,对性能的影响小
- RDB劣势:
- 实时性低,需要等待save
- 有数据丢失风险,如果在save存储间隔期间宕机则无法存储到那期间的数据
- 数据过大时,fork过程会克隆一份数据,相当于内存中突然出现了两倍的数据,可能会影响性能
AOF示例
AOF 日志存储的是 Redis 服务器的顺序指令序列,AOF 日志只记录对内存进行修改的指令记录
1.配置文件
-
appendonly:是否开启AOF
-
appendfilename:AOF文件名。默认值为
appendonly.aof -
appendfsync:AOF持久化策略的配置。有三个选项:
-
no:不执行fsync,由操作系统保证数据同步到磁盘,速度最快,但不太安全。 -
always:每次写入都执行fsync,以保证数据同步到磁盘,效率很低。 -
everysec:每秒执行一次fsync,这是默认选项,兼顾了安全性和效率。但可能会导致最多丢失1秒的数据。
-
示例:
# 开启AOF持久化功能
appendonly yes # AOF文件的名称
appendfilename "appendonly.aof" # 配置AOF持久化的fsync策略
# 使用everysec可以实现性能和数据安全性的平衡,每秒fsync一次
appendfsync everysec # AOF文件自动重写的触发条件
# 设置为100,表示当AOF文件大小是上一次重写后的AOF文件大小的100%时,触发重写
auto-aof-rewrite-percentage 100 # 设置触发AOF重写的最小文件大小
# 避免AOF文件很小的时候触发重写,减少不必要的重写操作
auto-aof-rewrite-min-size 64mb # 配置在启动加载AOF文件时对不完整文件的处理
# 设置为yes,允许加载不完整的AOF文件,提高数据恢复的灵活性
aof-load-truncated yes # 启用增量式fsync,减少磁盘I/O操作
aof-rewrite-incremental-fsync yes # 在AOF重写期间,使用备用的子进程进行写操作,减少对主进程的影响
# 注意: 在Redis 4.0及以上版本中,这通常是默认行为
# aof-rewrite-use-rdb-preamble yes # 根据Redis版本和具体需求选择是否启用混合持久化 # 配置文件的目录,AOF文件会存储在这个目录下
dir /data # 其他可能的配置项,根据实际需求进行配置
# 例如,关于AOF重写期间是否禁止appendfsync
# no-appendfsync-on-rewrite no
2.校验
随便搞点数据进去(set k '123'),然后打开appendonly.aof

混合型持久化存储
混合持久化在AOF重写时,将压缩的RDB数据置于AOF文件首,后续追加AOF命令,以结合两者优势加速恢复并减少数据丢失风险
它继承了RDB和AOF优点:
- 快速恢复(RDB)
- 数据完整(AOF)
配置文件
首先启用 AOF 持久化,并设置 aof-use-rdb-preamble 为 yes(Redis 5.0 及以上版本中默认启用)
appendonly yes
aof-use-rdb-preamble yes
当 AOF 文件增长到一定大小时,Redis 会自动触发 AOF 重写过程。在重写过程中,Redis 会首先创建一个新的 AOF 文件,并将当前的内存快照(RDB 格式)以二进制压缩形式写入到这个新文件的开头
手动触发AOF重写
redis-cli BGREWRITEAOF
相关文章:
Redis持久化的三种方式(RDB、AOF和混合)
Redis持久化的三种方式(RDB、AOF和混合) 目录 Redis持久化的三种方式(RDB、AOF和混合)介绍RDB示例1.配置文件2.触发 RDB 快照保存3.验证 AOF示例1.配置文件2.校验 混合型持久化存储配置文件 介绍 Redis数据主要存储与内存中,因此如果服务器意外重启、宕机、崩溃&am…...
Telnet发送get/post请求
连接到HTTP服务器 telnet www.baidu.com 80Ctrl ] 发送请求 GET /index.html HTTP/1.1 Host: www.baidu.com# 发送post请求 POST /test/firstTest HTTP/1.1 HOST:127.0.0.1 Content-Type:application/x-www-form-urlencoded Content-Length:10连续按两次 Enter 键发送请求 HT…...
PostgreSQL匹配字符串方法
PostgreSQL匹配字符串方法 在 PostgreSQL 中,如果你想要检查一个包含多个由逗号分隔的值的字符串是否包含特定的子字符串,你可以使用字符串函数来实现这一点。由于你正在查找的是一个由逗号分隔的列表中的特定值,你需要确保在比较时该值不是…...
Docker镜像加速配置
由于当前运营商网络问题,可能会导致您拉取 Docker Hub 镜像变慢,索引可以配置阿里云镜像加速器。阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 每个人镜像地址都不一样,需要登陆阿里云自行查看,地址在上面&a…...
【elementui】记录解决el-tree开启show-checkbox后,勾选一个叶结点后会自动折叠的现象
第一种解决方案:设置default-expand-keys的值为当前选中的key值即可 <el-treeref"tree"class"checkboxSelect-wrap":data"treeData"show-checkboxnode-key"id":expand-on-click-node"true":props"defau…...
用Vue3和Plotly.js绘制交互式3D烛形图
本文由ScriptEcho平台提供技术支持 项目地址:传送门 Plotly.js实现交互式K线图 应用场景 K线图广泛应用于金融领域,用于展示股票、外汇等金融产品的价格走势。它直观地呈现了开盘价、收盘价、最高价和最低价等信息,帮助投资者分析市场趋势…...
git上传文件
git init git add . git commit -m " " git remote add origin 仓库的地址 git push -u origin master 如果出现以下问题 可以用这一句强制上传 git push -f origin master...
Redis 7.x 系列【16】持久化机制之 AOF
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 执行原理2.1 Redis 6.x2.1.1 直接写2.1.2 重写 2.2 Redis 7.x2.2.1 直接写2…...
使用 PostGIS 生成矢量图块
您喜欢视听学习吗?观看视频指南! 或者直接跳到代码 Overture Maps Foundation是由亚马逊、Meta、微软和 tomtom 发起的联合开发基金会项目,旨在创建可靠、易于使用、可互操作的开放地图数据。 Overture Maps 允许我们以GeoJSON格式下载开放…...
WebSocket 心跳机制如何实现
是一种简单并且有效的策略,用于维持长链接的活跃状态,防止因为网络空闲或者不稳定因素,导致链接意外中断。通过周期性的心跳消息,确保了链接的持久性和周期性,是维持实时通信服务稳定运行的关键组件。 1. 定时发送心跳…...
Docker 容器连接
Docker 容器连接 引言 在当今的软件开发和运维领域,Docker 已经成为了一个不可或缺的工具。它通过容器化的方式,为开发者提供了一种轻量级、可移植的计算环境。然而,要充分发挥 Docker 的潜力,我们需要掌握如何连接这些容器。本文将深入探讨 Docker 容器连接的概念、方法…...
【C语言】continue 关键字
当在C语言中使用continue关键字时,它用于控制循环语句的执行流程。与break不同,continue不会终止整个循环,而是终止当前迭代,并立即开始下一次迭代。这种行为使得可以在循环内部根据特定条件跳过某些代码块,从而控制程…...
Taro + vue3 中微信小程序中实现拉起支付
在前端开发中 H5 的拉起支付和微信小程序的拉起支付 是不太一样的 现在分享一下微信小程序中的拉起支付 逻辑都在后端 我是用的Taro 框架 其实就是一个Api Taro 文档...
003-GeoGebra如何无缝嵌入到PPT里
GeoGebra无缝嵌入到PPT里真是一个头疼的问题,已成功解决,这里记录一下,希望可以帮助到更多人。 注意,后续所有的文章说的PPT都是Offce Power Point, 不要拿着WPS的bug来问我哦,我已经戒WPS了(此处表示无奈&…...
AI:开发者的朋友还是对手?
AI是在帮助开发者还是取代他们? 在软件开发领域,生成式人工智能(AIGC)正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试,AI工具正在成为开发者的得力助手。然而,这也引发了对开发者职业…...
如何在Android Studio中查看APP客户端日志
测试Android应用时,日志查看是一个至关重要的调试工具,它帮助测试人员快速定位问题。幸运的是,Android Studio为我们提供了一个强大的工具——Logcat,使得查看运行时日志变得直接且简单。本文将引导你如何在Android Studio中使用L…...
2024微信小程序期末大作业-点奶茶微信小程序(后端nodejs-server)(附下载链接)_微信小程序期末大作业百度网盘下载
菜单展示 购物车展示: 提交订单: 支付详情页展示: 订单查看: 查看历史消费: 部分代码展示: <!--pages/home/home.wxml--> <block wx:for"{{listData}}" wx:key"itemlist&qu…...
Qt:4.信号和槽
目录 1.信号源、信号和槽: 2.Qt类的继承关系: 3.自定义槽函数: 4.第一种信号和槽的连接的方法: 5.第二种信号和槽的连接的方法: 6.自定义信号: 7.发射信号: 8.信号和槽的传参:…...
Ubuntu20.04更新GLIBC到2.35版本
目录 1 背景2 增加源2.1 标准源2.2 镜像源 3 更新 1 背景 Ubuntu20.04默认GLIBC库版本是2.31.今天碰到一个软件需要2.35版本的GLIBC。 升级GLIBC库有两种方式: 下载高版本库源码,编译后替换系统中低版本库。由于GLIBC库是Linux系统中最基础库ÿ…...
Qt 实战(7)元对象系统 | 7.1、简介
文章目录 一、简介1、元对象系统的基本条件2、元对象系统的核心功能3、元对象系统的核心类4、总结 Qt的元对象系统(Meta-Object System)是Qt框架中一个极其重要的组成部分,它为Qt提供了信号与槽机制、实时类型信息(RTTI࿰…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
