哈喽,大家好,我是有勇气的牛排(全网同名)
有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。
官方文档:https://redis.io/docs/management/persistence/
RDB (Redis DataBase) 持久性以指定的时间间隔执行数据集的时间点快照,这个快照文件就称为RDB(dump.rdb),在恢复的时候将快照文件读会到内存即可。
在保存快照的时候,它是备份全量快照,也就是把内存中的所有数据都记录到磁盘中。
配置
config get requirepass
config get port
启动
redis-server /usr/local/redis/redis.conf
redis-cli -a 123456
语法:save m n
描述:如果m秒内数据集存在n次修改时,自动触发bgsave
# 每隔900s(15min), 如果超过1个key发生了变化,就写一份新的RDB文件
save 900 1
语法:save
Reids将会再如下两种情况保存快照:
# 禁用快照 空字符串
save ""
# Unless specified otherwise, by default Redis will save the DB:
# * After 3600 seconds (an hour) if at least 1 change was performed
# * After 300 seconds (5 minutes) if at least 100 changes were performed
# * After 60 seconds if at least 10000 changes were performed
# 例如
save 3600 1 300 100 60 10000
Redis7
# 5s内有2次修改 则保存
save 5 2
# 504 自定义保存路径
dir /usr/local/redis/data
# 481 自定义保存文件名
dbfilename dump.rdb
1、save
在住程序包中执行会阻塞当前redis服务器,直到持久化工作完成,在执行save命令期间,Redis不能处理其他命令,线上禁止使用。
2、bgsave
执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。
3、lastsave
获取上一次成功快照时间
修复命令
redis-check-rdb /usr/local/redis/redis.conf
修改配置
save ""
命令修改
redis-cli config set save ""
# yes(默认, 推荐)
# no: 表示不在户数据不一致or其他手段发现和控制这种不一致,那么在快照写入失败时,也能确保redis继续接受新的写请求。
stop-writes-on-bgsave-error yes
# yes(默认, 推荐): 对于存储到磁盘中的快照,可以设置是否进行压缩存储。
# 如果是:redis则会采用LZF算法进行压缩。
rdbcompression yes
# yes(默认, 推荐): 在存储快照后,还可以让redis使用CRC64算法进行数据校验,但是这样做会增大10%的性能消耗,如果希望性能最大提升,则可以关闭。
rdbchechsum yes
# 在没有持久性的情况下删除复制中使用的RDB文件启动
# 默认为no
rdb-del-sync-files no
定义:以日志的形式来记录每个写操作,将Redis执行过得所有写指令记录下来(读操作不记录),只许追加文件不可以写文件,redis启动之初会读取该文件重新构建数据,换言之,reids重启的话就根据日志文件的内容将写指令从前到后执行一次,以完成数据的恢复工作。
默认情况下,redis没有开启AOF。
保存文件为:appendonly.aof
Always
:同步回写,每个命令执行完立刻同步地将日志写会磁盘。
everysec
:每秒写回,每个命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔1s把缓冲区的内容写入磁盘。
no
:操作系统控制写回,每隔命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。
# 1379
appendonly everysec
配置项 | 写回时机 | 优点 | 缺点 |
---|---|---|---|
Always | 同步写回 | 可靠性高,数据基本不丢失 | 每个写命令都要落盘,性能影响大 |
Everysec | 每秒写回 | 性能适中 | 宕机时丢失1s内的数据 |
No | 操作系统控制写回 | 性能好 | 宕机时丢失的数据较多 |
在redis6中只用单个AOF文件,但是在redis7中,AOF被拆分为了3个文件(Multi Part AOF设计)
redis6
# AOF开启
appendonly yes
# 写回策略
appendfsync everysec
# 保存路径 与RDB一样
dir /usr/local/redis/data
# 文件名
appenddirname "appendonly.aof"
reids7
# AOF开启
appendonly yes
# 写回策略
appendfsync everysec
# RDB数据保存路径
dir /usr/local/redis/data
# AOF保存路径(自动拼接dir)
# 1412 {dir}/appendonlydir
appenddirname "appendonlydir"
# 1406 文件名
appenddirname "appendonly.aof"
Append only mode模块
# 是否开启aof
appendonly yes
# 文件名称
appendfilename "appendonly.aof"
# 同步方式: everysec/always/no
appendfsync "everysec"
# aof重写期间是否同步
no-appendfsync-on-wirte no
# 重写触发配置、文件重写策略
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
问题:AOF文件没有写完,宕机等情况
异常修复命令
redis-check-aof --fix ***.aof
优点
缺点
默认在同时开启rdb和aof持久化时,重启时只会加载aof文件,不会加载rdb文件。
开启混合持久化方式后:
配置
# 开启混合持久化配置
aof-use-rdb-preamble yes
先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或者手动触发重写的时候,将最新的数据存储为RDB记录。这样的话重启服务的时候会从RDB何AOF两部分恢复数据,既保证了数据完整性,又提高了恢复数据的性能。
# 禁用RDB
# 禁用后仍然可以使用save、bgsave生成RDB文件
save ""
# 禁用AOF
# 禁用后,仍然可以使用 bgrewrtteaof 生成aof文件
appendonly no
参考地址:
https://www.bilibili.com/video/BV13R4y1v7sP(尚硅谷~阳哥)