redis 持久化(RDB、AOF)

1 介绍

  redis 是基于内存存储的数据库,为避免断电或服务器宕机重启导致数据丢失,因此需要持久化。

  持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘中,也就是 snapshot 快照,发生宕机重启后,直接将快照文件读入内存即可。

  redis 的持久化有两种,rdb 与 aof。

3 RDB

  redis 的默认持久化方式。

3.1 持久化过程

在这里插入图片描述
  redis 会单独创建一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束后,再用这个临时文件替换上次的吃句话好的文件。整个过程中,主进程是不进行任何 IO 操作的。这就确保了极高的性能。如果需要进行大规模数据的回复,且对于数据回复的完整性不是非常敏感的话,那么 rdb 方式要比 aof 方式更加高效。rdb 的缺点是最后一次持久化后的数据可能丢失。默认使用 rdb。

3.2 配置文件

  RDB 保存的默认文件名为 dump.rdb,redis.conf 的配置文件如下:

# The filename where to dump the DB
dbfilename dump.rdb
...
save 60 3

save 表示在 60 秒内,key 发生了至少 3 次变化,则持久化,生成 dump.rdb 文件。

3.3 测试

  测试如下, 先保存配置文件后重启启动 redis,一分钟内设置 3 个key:(如果 /usr/local/bin 目录下有 dump.rdb 文件,则先删除)

127.0.0.1:6379> set name pkyShare
OK
127.0.0.1:6379> set count 1
OK
127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> save
OK

  查看目录可以发现,多了一个 dump.rdb 文件。

[root@VM-0-4-centos bin]# ll
total 32844
-rw-r--r-- 1 root root      92 May 16 22:10 backup.db
-rw-r--r-- 1 root root     141 May 18 01:42 dump.rdb
-rw-r--r-- 1 root root   61842 May 17 21:46 predis.conf
-rwxr-xr-x 1 root root 4366904 May 14 16:25 redis-benchmark
-rwxr-xr-x 1 root root 8125312 May 14 16:25 redis-check-aof
-rwxr-xr-x 1 root root 8125312 May 14 16:25 redis-check-rdb
-rwxr-xr-x 1 root root 4807976 May 14 16:25 redis-cli
lrwxrwxrwx 1 root root      12 May 14 16:25 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 8125312 May 14 16:25 redis-server
3.4 持久化的出发机制
  • save 命令触发
127.0.0.1:6379> save
OK
  • flushall 命令触发
  • 退出 redis 时触发
3.5 恢复数据

  如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 config命令,如下所示:

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/bin"

相当于全自动的恢复数据。

3.6 优缺点
  • 优点

    • 适合大量的数据恢复。
    • 对数据的完整要求不高。
  • 缺点

  • 需要一定的时间间隔进行操作,比如 save 60 10000 这样的话,在 50 秒内宕机了,那么 50 秒前的数据已保存,而 50 秒后的数据就会丢失。

  • fork 进程的时候,会占用一定的内存空间。

4 AOF

   AOF 以日志的形式记录每个操作。将 redis 执行的所有命令都记录下来(读操作不记录)。redis 启动时会根据 AOF 文件内容将写指令全部执行一遍完成数据恢复。

4.1 持久化过程
4.2 配置文件

  AOF 保存的文件为 appendonly.aof。,redis.conf 的配置文件如下:

############################## APPEND ONLY MODE ###############################
#
appendonly no
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"

# appendfsync always
appendfsync everysec
# appendfsync no
  • appendonly 默认不开启。
  • appendfsync 持久化策略,默认每一秒执行一次
4.3 测试

  先将 appendonly 改为 yes,然后重启 redis,重复 RDB 的设置 key 的命令,可以看到,/usr/local/bin 目录下多了 appendonly.aof 文件

[root@VM-0-4-centos bin]# ll
total 32844
-rw-r--r-- 1 root root      92 May 16 22:10 backup.db
-rw-r--r-- 1 root root     141 May 18 01:42 appendonly.aof
-rw-r--r-- 1 root root   61842 May 17 21:46 predis.conf
-rwxr-xr-x 1 root root 4366904 May 14 16:25 redis-benchmark
-rwxr-xr-x 1 root root 8125312 May 14 16:25 redis-check-aof
-rwxr-xr-x 1 root root 8125312 May 14 16:25 redis-check-rdb
-rwxr-xr-x 1 root root 4807976 May 14 16:25 redis-cli
lrwxrwxrwx 1 root root      12 May 14 16:25 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 8125312 May 14 16:25 redis-server

  打开 appendonly.aof 文件可以看到记录了设置 key 的全部命令

[root@VM-0-4-centos bin]# vim appendonly.aof
*2
$6
SELECT
$1
0
*3
SET
$2
name
$2
pky
*3
$3
set
$2
money
$2
.
.
.

如果 aof 文件有错误,redis 是无法启动的,因此需要修复 aof 文件。redis 提供一个工具, redis-check-aof,在redis 的安装路径下就有,即上图的路径。然后执行以下命令即可修复。

[root@VM-0-4-centos bin]# redis-check-aof --fix > appendonly.aof
4.4 优缺点
  • 优点
    • AOF 可以更好的保护数据不丢失,一般 AOF 会以每隔 1 秒,通过后台的一个线程去执行一次 fsync 操作,如果 redis 挂掉了,最多丢失 1 秒的数据。
    • AOF 以 append-only 的模式写入,所以没有任何的磁盘寻址的开销,写入性能非常的高。
    • AOF 日志文件的命令通过非常可读的方式进行记录,这个非常适合做灾难性的误删除紧急恢复,如果某人不小心用 flushall 命令清空了所有数据,只要这个时候还没有执行 rewrite,那么就可以将日志文件中的 flushall 删除,进行恢复。
  • 缺点
    • 对于同一份数据备份文件,AOF 比 RDB 大
    • OF 开启后支持写的 QPS 会比 RDB 支持的写的 QPS 低,因为 AOF 一般会配置成每秒 fsync 操作,每秒的 fsync 操作还是很高的。
    • 据恢复比较慢,不适合做冷备。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值