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

Redis数据持久化——RDB快照和Aof日志追加

Redis数据持久化

数据持久化:将内存中的数据保存到磁盘中。

作用:让Redis服务重启后可以恢复之前的数据。

一、Redis数据持久化的方式:

 ·RDB(快照):

将内存中Redis缓存的所有数据,都以二进制字符串的方式保存为一个.rdb文件。

特点:占用存储小;当恢复所有数据时,速度快。(恢复某一段数据比较慢,意外宕机还可能丢失几分钟的数据)不建议频繁生成快照。

 ·AOF(日志追加):

将每次增、删、改的操作添加到.aof日志中,默认明文存储(可压缩),占据更大的存储空间,保存数据时,运行资源占用少。追加日志可以实时添加

对比维度

RDB(快照)

AOF(日志)

核心原理

定时生成内存全量数据的二进制快照

实时追加每一条写指令到文本日志

文件格式

二进制文件(.rdb),体积小

文本文件(.aof),体积大(重写前)

数据安全性

安全性低:间隔快照,可能丢失“快照后-宕机前”的数据

安全性高:支持每秒/实时刷盘,最多丢失1秒数据

恢复速度

快:直接解析二进制数据到内存

慢:需重新执行所有写指令

性能影响(运行时

低:仅fork子进程时短暂阻塞,后续无影响

中/高:刷盘频繁(如everysec/always),I/O开销大

性能影响(恢复时

快:适合大规模数据恢复

慢:数据量越大,恢复时间越长

触发方式

自动(save配置)、手动(save/bgsave)

自动(刷盘策略)、手动(bgrewriteaof重写)

适用场景

非核心数据、备份/灾备、可接受数据丢失的场景

核心数据、需高安全性(如金融、交易)的场景

默认开启

是(默认持久化方案)

否(手动配置appendonlyyes)

二、RDB持久化触发机制

触发RDB持久化过程分为手动触发和自动触发

2.1、手动触发:通过 Redis 命令主动生成 RDB:

save:主进程直接执行 RDB,期间会阻塞所有客户端请求(不推荐生产环境,适用于小型数据集);

bgsave:后台保存,主进程 fork 子进程执行 RDB,主进程不阻塞(生产环境首选)。

2.2、自动触发

自动触发持久化,本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次 bgsave 命令。

通过 redis.conf 配置 “时间 - 修改次数” 规则,满足条件时自动执行 RDB,示例配置:

# 规则格式:save <秒数> <修改次数>

save 900 1       # 900秒内(15分钟)至少1次数据修改,触发RDB

save 300 10      # 300秒内(5分钟)至少10次数据修改,触发RDB

save 60 10000    # 60秒内至少10000次数据修改,触发RDB

当设置多个 save m n 命令时,满足任意一个条件都会触发持久化。

若需禁用自动 RDB,可注释所有 save 配置,或添加 save ""

三、RDB持久化配置

3.1、配置文件

vim /etc/redis/redis.conf

#RDB持久化自动触发条件

save 900 1

save 300 10

save 60 10000

#bgsave持久化失败,是否停止持久化数据到磁盘,yes 表示停止持久化,no 表示忽略错误继续写文件

stop-writes-on-bgsave-error yes

#rdb文件是否压缩

rdbcompression yes

#写入文件和读取文件时是否开启rdb文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。

rdbchecksum yes

#rdb持久化后存放的文件名

dbfilename dump.rdb

#rdb持久化后文件的存放路径

dir ./

注意:

文件压缩要是开启的话:Redis 会采用 LZF 算法进行压缩。如果不想消耗 CPU 性能来进行文件压缩的话,可以设置为关闭此功能,这样的缺点是需要更多的磁盘空间来保存文件。

3.2、配置查询/设置

config get xxx

127.0.0.1:6379> config get dir

1) "dir"

2) "/usr/local/redis"

127.0.0.1:6379> config get dbfilename

1) "dbfilename"

2) "dump.rdb"

127.0.0.1:6379> config get stop-writes-on-bgsave-error

1) "stop-writes-on-bgsave-error"

2) "yes"

config set xxx

[root@zuolaoshi /]# cd /usr/local/redis

[root@zuolaoshi redis]# ./bin/redis-cli

127.0.0.1:6379> config set dir "/usr/local/redis/data"

OK

127.0.0.1:6379> config get dir

1) "dir"

2) "/usr/local/redis/data"

注意:

使用命令修改的方式,马上生效,在 Redis 重启之后就会丢失。手动修改 Redis 配置文件,想要立即生效需要重启 Redis 服务器,会一直有效。

3.3、禁用持久化

127.0.0.1:6379> config set save ""

OK

3.4、RDB文件恢复

当 Redis 服务器启动时,Redis 就会自动加载 RDB 文件恢复持久化数据。

验证加载

启动redis时

image20200229014938758.png

四、RDB持久化案例

4.1、手动持久化

127.0.0.1:6379> config set save ""

OK

127.0.0.1:6379> set s helloworld!

OK

127.0.0.1:6379> get s

"helloworld!"

127.0.0.1:6379> save

OK

127.0.0.1:6379> del s

(integer) 1

127.0.0.1:6379> get s

(nil)

127.0.0.1:6379> exit

[root@zuolaoshi redis]# ./bin/redis-cli shutdown

[root@zuolaoshi redis]# ./bin/redis-server /etc/redis/redis.conf

#Redis服务端启动成功提示信息

[root@zuolaoshi redis]# ./bin/redis-cli

127.0.0.1:6379> get s

"helloworld!"

4.2、自动持久化案例

#新建log文件夹

[root@zuolaoshi redis]# mkdir log

#配置日志文件

[root@zuolaoshi redis]# vim redis.conf

#配置:logfile "/usr/local/redis/log/redis.log"

[root@zuolaoshi redis]# ./bin/redis-server /etc/redis/redis.conf

[root@zuolaoshi redis]# ./bin/redis-cli

127.0.0.1:6379> config set save "10 1"

OK

127.0.0.1:6379> config get save

1) "save"

2) "10 1"

127.0.0.1:6379> set a 123

OK

127.0.0.1:6379> set b 456

OK

127.0.0.1:6379> set c 789

OK

127.0.0.1:6379> set d 8910

OK

127.0.0.1:6379> exit

[root@zuolaoshi redis]# cd log

[root@zuolaoshi log]# ls

redis.log

[root@zuolaoshi log]# vim redis.log

image20200229024640021.png

五、AOF持久化

AOF方式在使用Redis存储非临时数据时,一般都需要打开AOF持久化来降低进程终止导致的数据丢失,AOF可以将Redis执行的每一条写命令追加到硬盘文件中,这一过程显然会降低Redis的性能,但是大部分情况下这个影响是可以接受的,另外,使用较快的硬盘能提高AOF的性能。

5.1、AOF工作流

命令写入 (append)、文件同步(sync)、文件重写(rewrite)、重启加载 (load)

image20200303224156711.png

5.2、AOF特点

默认文件名是 appendonly.aof。保存的位置由配置中 dir 来配置目录。

AOF 每次都会保存写命令,数据实时性更高。

AOF 需要使用“重写机制”来优化,每次记录写命令,文件会很大的问题。

AOF 根据不同的“缓冲区同步策略”将我们缓冲区中写入的命令,同步到磁盘。

重写机制

image20200303233558568.png

缓冲区同步策略

设置appendfsync 控制,一共3种:

always:客户端的每一个写操作都保存到aof文件当,这种策略很安全,但是每个写都会有IO操作,所以也很慢。

everysec:每秒写入一次aof文件,因此,最多可能会丢失1s的数据。 推荐使用这种方式。

no: 交由操作系统来处理什么时候写入aof文件。更快,但也是最不安全的选择,不推荐使用。

5.3、持久化恢复

在重启redis服务时,rdb与aof如何执行?

image20200303235441014.png

六、开启AOF持久化

6.1、修改配置

修改配置文件/usr/local/redis/redis.conf

appendonly yes #表示开启AOF持久化,默认是no表示关闭

appendfilename "appendonly.aof" #AOF持久化文件名

appendfsync everysec #缓冲同步策略,默认值

no-appendfsync-on-rewrite no  #是否重写,默认不重写

http://www.dtcms.com/a/353729.html

相关文章:

  • 8.28 模拟
  • 从易用性的角度来看,哪个ETL平台比较好用?
  • MySQL-数据类型
  • Clerk 用户认证系统集成文档
  • 关于virtual camera
  • UE5 PCG 笔记(三) Height To Density 节点
  • UE5 查找组件
  • UE5多人MOBA+GAS 55、基于 Python 协调器与 EOS 的会话编排
  • 嵌入式Linux自学不走弯路!670+讲课程!系统学习路线:入门+应用+ARM+驱动+移植+项目 (STM32MP157开发板)
  • 快速入门PowerDesigner-Database
  • 软件开发整体介绍和Swagger介绍和使用步骤
  • Dubbo加标签方式
  • Ubuntu 22.04 插入光驱后磁盘满启动故障clean, ...files, ...blocks
  • Proxmox VE 中启用 CentOS 虚拟机的串口终端(xterm.js 控制台)
  • MAX系列FPGA型号对比及低功耗特性分析
  • 服务器类型与TCP并发服务器构建(SELECT)
  • 冬天的思念
  • 数模笔记day01(数据预处理、K-means聚类、遗传算法、概率密度分布)
  • SqlHelper类库的使用方法
  • 关于DTO、DO、BO、VO
  • Linux系统性能优化全攻略:从CPU到网络的全方位监控与诊断
  • [实战] 半导体工厂生产网络项目案例分享
  • 遥感语义分割消融实验+对比实验
  • AI驱动的前端性能优化:从监控到自动化修复
  • SymPy 与 NumPy 混合编程:解决矩阵类型转换与数学函数兼容性问题
  • 计算机视觉全流程(基础知识)
  • 耐达讯自动化Profibus 集线器:变送器连接的神秘王牌
  • SCDN如何保护敏感内容不被非法访问?
  • 【PyTorch从入门到实战】全面解析PyTorch框架:安装、原理、MNIST实战与核心组件
  • 数据采集如何选择移动代理IP?合理避免网站封禁实战经验