由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。
redis提供两种方式进行持久化,一种是RDB
持久化(原理是将Reids在内存中的数据库记录定时 dump到磁盘上的RDB持久化),另外一种是AOF
(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)
本篇为综合整理的文档,若要深入了解可查阅Redis官网文档
RDB
持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB
持久化过程分为手动触发和自动触发
过程:
SAVE 阻塞式的RDB持久化,当执行这个命令时间时rdis的主进程把内存里的数据库状态写入到rdb文件中,直到该文件创建完毕的这段时间内redis讲不能处理任何命令请求
BGSAVE 非阻塞式的持久化,它会创建一个子进程,专门去把内存中的数据库状态写入RDB文件,同时主进程还可以处理来自客户端的请求命令,但子进程基本是复制父进程,这等于两个相同大小的redis进程在系统上运行,会造成内存使用率的大幅增加。
1.手动执行bgsave或save命令 2.根据配置文件的save选项自动触发 3.主从结构时,从节点执行全量复制操作,主节点自动执行,将生成的RDB文件发送给从 4.执行debug reload命令重新加载Redis时 5.默认情况下执行shutdown命令关闭redis时,如果没有开启AOF持久化功能则自动执行
优势:
劣势:
redis.conf文件
#注释所有save行则停止rdb持久化
#900秒(15分钟)内至少1个key值改变(则进行数据库保存--持久化)
save 900
1
#300秒(5分钟)内至少10个key值改变(则进行数据库保存--持久化)
save 300
10
#60秒(1分钟)内至少10000个key值改变(则进行数据库保存--持久化)
save 60
10000
#当RDB持久化出现错误后,再写入数据会报错,用于提示用户出问题了。
#yes是开启,no是关闭,默认开启
stop-writes-on-bgsave-error yes
#是否压缩rdb文件,rdb文件压缩使用LZF压缩算法,压缩会消耗一些cpu,不压缩文件会很大
#yes开启,no关闭,默认开启
rdbcompression yes
#使用CRC64算法来进行数据校验,防止RDB是错误的,但是这样做会增加大约10%的性能消耗
#yes开启,no关闭,默认开启
rdbchecksum yes
阻塞当前Redis服务器 直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。
save
Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。
bgsave
查看latest_fork_usec选项,可以获取最近一个fork操作的耗时,单位为微秒。
info stats
1.将RDB备份放到配置文件指定的数据目录下,启动redis将会自动恢复。加载期间将会阻塞,无法进行其它操作。
2.上述方法不行,或者恢复的集群,可以使用redis-migrate-tool工具进行恢复。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。