Redis之持久化方式详解

Redis 持久化方式

由于Redis是纯内存运行的NoSQL数据库,存在断电数据丢失的问题,因此Redis引入了数据持久化方式,目前常用的持久化方式有RDB(快照方式)、AOF(增量方式)和RDB+AOF混合持久化方式(4.0以后版本支持)

RDB

RDB方式即使用快照来存储数据,在磁盘中生成一个dump.rdb文件(文件经过压缩,不具有可读性),默认触发方式有主动触发和被动触发。

被动触发
在redis.conf配置文件中配置了持久化命令的触发条件,满足任一条件都可以触发持久化操作(默认bgsave)。

save 900 1       # 每900秒有1次改动就保存一次
save 300 10      # 每300秒有10次改动就保存一次
save 60 10000    # 每60秒有10000次改动就保存一次

在redis.conf中可以配置快照文件的位置和名称,注意修改conf文件后都需要重启redis服务。

dbfilename dump.rdb    # RDB操作默认生成的文件
dir ./                 # RDB操作默认生成的文件路径,在安装目录下
rdbcompression yes     # 是否压缩rdb文件,可以减少磁盘占用,但是会更多消耗一部分CPU

主动触发
可以在redis-cli客户端中输入save命令或bgsave命令执行持久化操作。

127.0.0.1:6379> save
OK     
127.0.0.1:6379> bgsave
Background saving started
  • save 命令会占用当前的Redis主进程,当执行完持久化操作后Redis才可以响应其他客户端的请求,容易造成客户端阻塞等待。
  • bgsave 是异步命令,会从Redis主进程中fork一个子进程进行刷盘操作,主进程在持久化的同时也可以响应客户端操作。 bgsave采用Copy-On-Write的方式,保证在进行快照操作的这段时间,需要写入磁盘上的数据在内存中不会发生变化。

bgsave执行过程图
在这里插入图片描述

AOF

由于RDB的同步方式是基于周期性的,如果Redis发生异常宕机可能会丢失一部分未同步的数据,而AOF(Append-Only File)可以将每一条Redis的更新指令采用增量的方式同步到磁盘中。
AOF的同步方式默认是关闭的,可以通过配置文件开启

appendonly yes   # 开启AOF同步
appendfilename "appendonly.aof"  # AOF的文件名

被动触发
在redis.conf配置文件中配置了AOF的同步方式,只能三选一。

# appendfsync always
appendfsync everysec
# appendfsync no
  • always:是只要有一个写操作命令执行成功,就执行一次fsync函数调用,性能最低,也最安全。
  • everysec:每秒执行一次fsync操作,兼顾性能和安全性,推荐使用。
  • no:将同步操作交由操作系统执行,性能最高,安全性最低。

主动触发
可以在redis-cli客户端中输入bgrewriteaof命令执行AOF操作。

127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started

执行命令后生成的aof文件如下

127.0.0.1:6379> set aaa bbb
OK
127.0.0.1:6379> set aa cc
OK
127.0.0.1:6379> del aa
(integer) 1
vi appendonly.aof

*3     # 该命令操作符为3个 set key value
$3     # 操作符长度为3
set
$3     # key长度为3
aaa
$3     # value长度为3
bbb
*3     # 该命令操作符为3个 set key value
$3     # 操作符长度为3
set  
$2     # key长度为2
aa
$2     # value长度为2
cc
*2     # 该命令操作符为2个 del key
$3     # 操作符长度为3
del
$2     # key长度为2
aa

混合持久化

在恢复数据时,RDB的数据会缺失但恢复速度快,AOF的数据全但是恢复速度慢 ,但为了数据安全性一般优先选择AOF文件恢复数据。为了优化AOF文件的恢复速度,Redis基于4.0版本推出了混合持久化的方式。这样做的好处是可以结合 RDB 和 AOF 的优点,可以快速恢复并避免丢失过多数据,缺点是 AOF 里面的 RDB 部分就是压缩格式不再是 AOF 格式,不再具有可读性。

混合持久化同样也是通过bgrewriteaof开启,生成的AOF文件包含两部分,前半段是RDB格式的全量数据,后半段是AOF格式的增量数据(主要是在持久化过程中执行的更新命令)。

开启方式
修改redis.conf下的配置文件,注意修改conf文件后都需要重启redis服务。

aof-use-rdb-preamble yes   # 默认为no

执行bgrewriteaof手动生成aof文件(也可以等待系统默认启动),再向Redis中写入数据

127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
127.0.0.1:6379> set name4 zl
OK
127.0.0.1:6379> set name5 sq
OK
127.0.0.1:6379> 

生成的aof文件中包含RDB部分的数据和刚使用AOF方式写入的数据。

vi appendonly.aof 

REDIS0009	redis-ver5.0.5
redis-bits󿿀򳨭eñt.used-mem` 
𮤭preamble󿾁þ򭠭e2lsname1zsname3wwÿׂ3i*2
$6
SELECT
$1
0
*3
$3
set
$5
name4
$2
zl
*3
$3
set
$5
name5
$2
sq
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值