Redis的持久化存储

Redis的持久化存储

1 为什么要进行持久化存储

在这里插入图片描述
上一篇博客介绍Redis的特点时讲到,Redis作为一种非关系型数据库,它有一个很大的优点就是将数据直接存储到内存中,这样使得我们提取数据的速度很快。但将数据存储到内存中有一个致命的缺点,就是一旦断电宕机或者Redis重启之后,我们所保存的数据会丢失。
如果我们可以将内存中的数据写入到硬盘中的话,即便Redis进行重启,我们的数据仍可以在硬盘中保留。这就是对数据进行持久化存储。
在Redis中提供了3种持久化模式来保证数据的持久化,即RDB方式、AOF方式以及混合方式进行持久化。

2 RDB方式实现持久化

2.1 RDB方式的优缺点

RDB全称redis database,又称快照模式,是Redis数据库中默认的持久化方式。原理是将Reids内存中某一时刻的数据压缩成二进制的格式直接写入到硬盘中,相当于直接复制一份数据到硬盘中。
在这里插入图片描述
其优点是由于在rdb文件中保存的是数据的二进制格式,所以还原数据的时候相当快,适合于做数据的备份。
但同时RDB有很大缺点,RDB每一次在保存数据的时候,首先都会清空原有的dump.rdb文件,然后将整个内存的数据以快照方式写入到这个文件中,如果在清空dump.rdb文件时,redis发生宕机或者重启,那么数据会全部丢失。

2.2 RDB方式实现内存与硬盘同步的策略

Linux系统下,在Redis的bin目录下会自动生成一个dump.rdb文件,下图为RDB文件的格式(加密):
在这里插入图片描述
打开Redis的配置文件redis.conf后定位到RDB的同步策略配置,如下图:
在这里插入图片描述
其中,Redis已经默认设置如下策略:
save 900 1 :在900秒的时间内如果有1个key键发生改变,那么将触发内存和硬盘同步
save 300 10 :在300秒的事件内如果有10个key键发生改变,那么将会触发内存和硬盘同步
save 60 10000 :在60秒的时间类假设有10000个key键发生改变,那么也变触发内存和硬盘同步
(以上三种策略只要有一个触发,则可实现内存和硬盘同步)

3 AOF方式实现持久化

3.1 AOF方式的优缺点

AOF全称append only file,与RDB不同的是,它并不是将Redis内存中的数据存储到硬盘上,而是将我们在客户端上输入的命令以文件的方式存储到硬盘上。

其优点是进行数据持久化时,是将Redis中存储数据时的命令直接以appendonly.aof文件的方式写入到硬盘中,并且在同步内存和硬盘时,新数据的写入不需要清空appendonly.aof文件,而可以直接进行追加。
缺点是进行数据还原时,由于appendonly.aof文件中记录的是操作的命令而不是实际的数据,所以Redis只能将appendonly.aof文件中的命令执行后才能获取数据,效率低。

3.2 AOF方式实现内存与硬盘同步的策略

由于Redis中默认持久化方式是RDB,所以我们需要手动开启AOF。
在Linux系统下,打开Redis的配置文件redis.conf后定位到AOF的同步策略配置,如下图:
在这里插入图片描述
将appendonly no改为yes,即可开启AOF方式,之后重启Redis,配置文件生效。此时,bin目录下会自动生成一个appendonly.aof文件。
在这里插入图片描述
随意输入一些数据,后打开appendonly.aof文件,发现appendonly.aof文件中存储的只是我们输出数据的命令。如下图:
在这里插入图片描述
以我们输入set abcd 123 这串数据为例:
*3
$3
set
$4
abcd
$3
123
*:代表的是命令的开始
3 :表示的是这个命令中有3块内容
$3: $使用修饰命令中的每一个参数的,3代表的是下面的这个命令一共有3个字符

打开Redis的配置文件redis.conf后定位到AOF的同步策略配置,如下图:
在这里插入图片描述
其中,Redis已经设置如下策略:
appendfsync always :只要有键发生改变,立马同步(每一次都触发IO操作,速度就慢下来,这种情况是不会丢数据)-----一般不用(效率太低了)
appendfsync everysec :每一秒钟进行数据同步一次(开发的时候一般选用他----速度上也比较快,即使出现数据的丢失也只会丢失1秒钟的数据)----aof中默认使用这种策略
appendfsync no :永远不同步,数据只是放到缓存里面 速度快 但是数据容易丢失

4 混合方式实现持久化

由于RDB和AOF两种持久化方式都有优缺点,那么实际开发中如何选择呢?
如果开发过程中可以接受在一段时间内一些数据的丢失,那么可以考虑使用RDB(速度快)。
若实际开发中不能接受数据丢失,那么可以考虑使用aof模式来做开发(安全)。

但在Redis4.0之后的版本,可以将这两种持久化方式进行整合,利用它们各自的优点组合成混合持久化方式。
打开redis.conf配置文件,定位到图下:
在这里插入图片描述
将aof-use-rdb-preamble 选项设置为yes,即可实现两种方式混合使用。
其原理如下图所示:
在这里插入图片描述
之后appendonly.aof文件中生成的格式上面是rdb格式,下面是aof格式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值