Redis如何进行持久化

RDB

Redis 在进行 RDB 持久化时,会 Fork 一个子线程出来进行持久化,由于 Redis 是单线程的,所以持久化的时候主线程不会进行任何 IO 操作

持久化时,先创建一个临时文件,并把数据写入这个临时文件中,待全部写完后,再把临时文件替换上次的持久化文件。在进行大规模的恢复时,RDB 比 AOF 高效

缺点:最后一次持久化后的数据可能会丢失

save 900 1	# 900s内修改了一个数据
save 300 10
save 60 10000

dbfilename dump.rdb

每次进行 RDB 持久化操作时,都会生成一个 dump.rdb 文件

如何触发 RDB 持久化

  1. 显示使用 save 命令,或者使用 bgsave 异步持久化
  2. 当使用 flushall 命令删除所有库时
  3. 退出 Redis 时

RDB 文件的恢复与备份

Redis 在启动时,会自动到启动目录下查找 dump.rdb 文件,并根据文件内容进行初始化

> config get dir # 查看rdb文件的目录
> cp dump.rdb dump.rdb.bak # 备份
> mv dump.rdb.bak dump.rdb # 恢复

AOF

Append Only File

AOF 是以追加日志文件的方式,将所有的命令记录下来,在恢复时再把文件记录的命令运行一次

缺点:可能导致最后一秒的数据丢失

保存的文件:appendonly.aof

当 RDB、AOF 同时开启时,默认使用 AOF

appendonly no	# 默认关闭AOF

appendfsync always	# 每次写入时同步
appendfsync everysec	# 每秒同步
appendfsync no	# 不主动进行同步,把同步实际交给操作系统

如果开启了 AOF,但 AOF 文件被破坏时,Redis 将不能启动,需要利用 redis-check-aof 恢复文件

[root@wes bin]# ls
chardetect      dump.rdb     jsonschema       redis-check-rdb
cloud-id        jsondiff     myconf           redis-cli
cloud-init      jsonpatch    redis-benchmark  redis-sentinel
cloud-init-per  jsonpointer  redis-check-aof  redis-server

[root@wes bin]# redis-check-aof --fix appendonly.aof

AOF 的优缺点

优点:

  • 每一次修改都同步,文件的完整性会更好
  • 每秒同步一次,但可能会丢失一秒的数据
  • 从不同步,效率最高

缺点:

  • 相对于数据文件来说,AOF 远大于 RDB,修复速度比 RDB 慢
  • AOF 运行效率比 RDB 慢

重写压缩

当 AOF 的文件大小达到一个阈值(64M)的时候,Redis 会对 AOF 文件的内容进行重写压缩,只保留可以恢复数据的最小指令集

使用命令 bgrewriteaof 可以显示重写

auto-aof-rewrite-percentage # 设置重写的y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值