redis从零开始系列 —— 数据持久化(RDB和AOF)

redis提供两种不同的持久化方法来将数据存储到硬盘里面。一种方法叫快照(RDB),它可以将存在于某一时刻的所有数据都写入硬盘里面;另一种方法叫只追加文件(AOF),它会在执行写命令时,将被执行的写命令复制到硬盘里面。

一、RDB持久化

redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。在创建快照之后,用户可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本,还可以将快照留在原地以便重启服务器时使用。(类似于关系数据库将数据库导出成xxx.sql文件相似)

1.创建RDB的三种方式:

(1)通过save创建RDB文件,save命令是一个同步命令,当执行save命令时,后面的命令需要等待。

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set php 1
OK
127.0.0.1:6379> set java 2
OK
127.0.0.1:6379> dbsize
(integer) 7
127.0.0.1:6379> save
OK

可以看到生成的rdb文件。

(2)通过bgsave创建RDB文件,bgsave是一个异步的命令,redis会调用fork来创建一个子进程,然后子进程负责将快照写入硬盘,而父进程则继续处理命令请求。

bgsave的流程图如下所示:

(3)通过配置文件来自动生成RDB文件,比如save 60 10000,那么从redis最近一次创建快照之后开始算起,当“60秒之内有10000次写入”这个条件被满足时,redis就会自动触发bgsave命令。如果设置多个save选项,只要其中一条满足,redis就会触发一次bgsave命令。

在redis的配置文件redis.conf加入如下配置:

save 900 1
save 300 10
save 60 3

当上诉三个条件任意一个满足时,执行bgsave命令,生成RDB文件。

二、AOF持久化

AOF持久化会将被执行的写命令写到AOF文件的末尾,以此来记录数据发生的变化。因此redis只要从头到尾执行一次AOF文件包含的所有写命令,就可以恢复AOF文件所记录的数据集。

AOF的三种配置参数:

appendfsync选项及同步频率
选项同步频率
always每个redis写命令都要同步写入硬盘。这样做会严重降低redis的速度
everysec每秒执行一次同步,显示地将多个写命令同步到硬盘
no让操作系统来决定应该何时进行同步

在配置文件中我们选择everysec选项:

appendonly yes//开启aof

appendfsync everysec
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set hello redis
OK
127.0.0.1:6379> set a v 
OK
127.0.0.1:6379> set b c
OK
127.0.0.1:6379> set h a
OK

这个时候我们就可以看到生成的AOF文件:

三、RDB和AOF对比

命令RDBAOF
启动优先级高(当redis重启时,优先执行AOF操作)
文件体积大(AOF文件的体积大小。因为redis会不断的将被执行的写命令记录到AOF文件中,随着redis不断运行,AOF文件的体积不断增长,在极端的情况下,体积不断增大的AOF文件甚至可能会用完硬盘的所有可用空间)
恢复速度
数据安全性丢数据根据策略决定
操作轻重

可以使用bgrewriteaof命令,来解决aof文件过大的问题,这个命令会通过移除AOF文件中的冗余命令来重写AOF文件,使AOF文件的体积变得尽可能的小。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值