redis持久化

1. Redis的持久化

a) 为什么需要持久化
因为Redis是一个内存性的数据库,为了保证数据在内存掉电时的安全,所以需要进行持久化操作

b) Redis的持久化(2种方案)

1. Snapshotting(RDB) :全本式复制 快照复制

 

建立临时文件的目的是减少IO的次数  因为在内存中先写入临时文件,等一定的时间后再把这个临时文件写入dump.rdb文件(在磁盘中)中可以减少IO的次数。

RDB存的这个数据也就是k1,v1  k2,v2 是数据本身,他会以数据的二进制来存,而AOF不是 具体 看下面

a) RDB机制的完成流程
1 redis的主进程 fork子进程 完成RDB写操作
2 redis的主进程对外提供服务,子进程会把当前数据库中的数据,写入临时文件
3 当临时文件写好之后,覆盖原有的RDB快照文件

b) RDB机制的运行时机

1). 自动RDB操作

修改redis.conf文件,将appendonly设置为no。当然默认就为no,redis默认持久化方式为RDB。

默认的系统进行RDB的时机为:


 

2). 手工RDB操作(两种输入命令)
save:Redis会用主进程 进行RDB文件的处理。这里使用主进程进行RDB,这样用户只能等待,等待主进程完成后才会继续响应用户这样不好。
bgsave: 主进程 fork 子进程完成RDB处理,这样用子进程去处理RDB较好。

a) RDB机制的问题

      2个保存点之间,有可能存在数据的丢失

2、AOF机制 (增量式复制 日志式复制)
注意:默认redis会使用RDB的方式进行持久化.
     redis中即使用RDB 又使用AOF时 ,redis会应用AOF来持久化

AOF是存的命令 存到日志,如果需要恢复只需要将这些命令从新执行一遍也就恢复了。而且存的一定是写命令,对于get之类的命令并不存。并且AOF数据的备份粒度更小,只要写一个写命令我就存一个

a) AOF运行机制

AOFRDB更加安全,记录每一次的写操作.但是如果在写的过程中掉电,也会丢失少量数据(但丢的少也就是一条数据)

b) AOF的使用

自动AOF
redis.conf配置文件

1. AOF中的注意细节

文件同步机制


AOF并不是把命令直接写到.aof文件中,而是先写到缓冲区中,缓冲区再写到文件中,而这个缓冲区什么时候往这个文件中写就是看这个文件缓存机制了,就是这些命令设置的。

b)日志文件的重做

面试题:AOF文件,插入一个命令后,我又把它删了,那这两个命令有没有价值?答案:没有。那日志文件中有没有这两个命令?答案是有的。 那怎么解决这个问题?进行合并

把日志文件中的命令,进行合理的合并.

合并的含义是:根据当前Redis数据的状态,从新写一个aop文件

i. bgrewriteaof

ii. 自动 redis.conf

运用自动进行合并的第一步就是打开rewrite,也就是将这个no设置为yes

然后看下面黄色部分,当文件超过原始文件的100%(初始是5mb,如果又加了5mb就需要进行合并)。或者当appendonly文件超过64mb,就进行合并。

1. Redis持久化的坑
假定初始Redis使用RDB进行持久化 , 切换AOF进行持久化.问题?

答:会出现数据丢失,因为开始是RDB存在dump.rdb文件中的,现在切换为AOF,那么这时候我们在取数据的时候是从appendonly.aof中取的,因此没有刚才存在dump.rdb中的数据了,只有原本在appendonly.aof中的数据。
RDB --- bgsave ---- dump.rdb
AOF --- appendonly.aof 获取数据

 

怎么解决呢?
进行热切换:

这种方式就是热切换,这样AOF机制就会马上将刚才的操作写入到appendonly.aof文件中,这时候aof文件了就有了之前存的东西。

热切之后将配置文件改到yes,就是改变redis.conf文件 appendonly yes。

持久化技术

优势

缺陷

Snapshotting

1、RDB产生的文件小。

2、RDB恢复快,并且简单,例如你可以快

   速的将RDB文件传输到其他主机,做数

   据的恢复。

3、在进行RDB备份的时候,主进程仅仅需

   要创建一个子进程,所有的I/O操作都

   由子进程完成

1、不能完全保证数据安全,在两个备份点之间可能会发

   生数据丢失

2、当数据量很大时,创建子进程可能会是一个非常耗时

   的操作,甚至可能需要1秒,在这个期间,Redis无法

   向客户端提供服务。

 

aof

1、数据的备份粒度更小,数据安全性更高。

2、AOF只会对日志文件进行追加操作,不

   会修改已经写好的内容。即使在掉电的

   情况下,AOF日志仍然是可用的

1、AOF文件通常比相同的数据集的RDB文件更大。

2、AOF写日志可能会很慢,这跟fsync的机制有关。

 

总结

快照易丢失数据,AOF模式较为安全,但日志重写时磁盘io开销大,容易导致服务器性能严重下降,并且需要足够的物理内存,这个比较危险,所以在高性能服务器上一般是用主从复制来进行持久化


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值