redis缓存持久化RDB和AOF

一、redis持久化

redis是一个基于内存的数据库,他的数据是放在内存中的。
如果服务器宕机、关闭服务器、关闭redis应用等数据会丢失。	
所以需要把内存中的数据写到磁盘里,这个过程就叫做持久化。

持久化有哪些?

1. RDB(Redis DataBase) :在指定的时间间隔内,定时的将 redis 存储的数据生成Snapshot快照并存储到磁盘等介质上;
3. AOF(Append Of File) :将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令
		从前到后再重复执行一遍,就可以实现数据恢复了。
4. 混合持久化:生产环境中一般采用两种持久化机制混合使用。
		将内存中数据快照存储在AOF文件中(模拟RDB),后续再以AOF追加方式。
		如果仅作为缓存使用,可以承受几分钟数据丢失,可以使用RDB,对主程序性能影响最小。

二、RDB

redis默认持久化方式

2.1 RDB执行原理

bgsave开始时会fork主进程子进程,子进程共享主进程的内存数据,完成fork后读取内存数据并写入RDB文件中。
fork采用的是copy-on-write:
- 当主进程执行读操作时,访问共享内存;
- 当主进程执行写操作时,则拷贝一份数据,执行写操作;

在这里插入图片描述

2.2 RDB配置

找到redis.conf文件,修改配置内容

方式一:配置文件触发(redis.conf)

#	在下面的示例中,行为将是保存:
#	900秒(15分钟)后,如果至少有一个按键发生了变化
#	300秒(5分钟)后,如果至少更换了10个按键
#	60秒后,如果至少更改了10000个密钥
#	save 秒钟 写操作次数
# 
save 900 1
save 300 10
save 60 10000

方式二:手动执行命令备份(save | bgsave)

有2个命令可以触发备份。

save:save时只管保存,其他不管,全部阻塞,手动保存,不建议使用。
		【主进程运行,影响其他进程操作】
bgsave:redis会在后台异步进行快照操作,快照同时还可以响应客户端情况。
		【子进程运行,不影响主进程的其他操作】
可以通过 lastsave 命令获取最后一次成功生成快照的时间(获取到的是时间戳)。

2.3 RDB优缺点

优点

大规模的数据恢复,并且对数据恢复的完整性要求不高,使用RDB比AOF更高效;
以二进制压缩文件的形式存储,占用内存更小;
redis使用bgsave命令进行持久化,基本不会影响主进程,保证了redis的高性能;

缺点

Fork的时候,内存中的数据会被克隆一份,大致2倍的膨胀,需要考虑;
虽然Redis在fork的时候使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能;
在备份周期在一定间隔时间做一次备份,所以如果Redis意外down的话,就会丢失最后一次快照后所有修改;

三、AOF

3.1 AOF执行原理

以独立日志的方式记录每次写的命令,重启时重新执行AOF文件中的命令恢复数据

AOF重写机制:AOF文件的大小达到某个阈值时,会将其中指令进行压缩。
	(如果有对于某个key多次的变更指令,则仅保留最新的数据指令)。即使用bgrewriteaof命令

3.2 AOF配置

# More details please check the following article:
# http://antirez.com/post/redis-persistence-demystified.html
#
# If unsure, use "everysec".

# appendfsync always
appendfsync everysec
# appendfsync no

上述配置策略说明如下:

- Always:服务器每写入一个命令,就调用一次 fsync函数,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,也不会丢失任何已经成功执行的命令数据,但是其执行速度较慢;	
- Everysec(默认):服务器每一秒调用一次 fsync 函数,将缓冲区里面的命令写入到硬盘。这种模式下,服务器出现故障,最多只丢失一秒钟内的执行的命令数据,通常都使用它作为 AOF 配置策略;
- No:服务器不主动调用 fsync 函数,由操作系统决定何时将缓冲区里面的命令写入到硬盘。这种模式下,服务器遭遇意外停机时,丢失命令的数量是不确定的,所以这种策略,不确定性较大,不安全。

3.3 AOF优缺点

优点:

 - 备份机制更稳健,丢失数据概率更低
 - 备份机制更稳健,丢失数据概率更低

缺点:

- 比RDB占用更多的磁盘空间
- 恢复备份速度要慢
- 每次读写都同步的话,有一定的性能压力
- 存在个别bug,造成不能恢复

四、混合持久化

综合RDB和AOF的优点,生产环境大多数都是这样配置的
redis版本在4.0以上即可
配置文件:综合RDB和AOF的配置文件即可

五、其他配置

stop-writes-on-bgsave-error:当磁盘满时,是否关闭redis的写操作
rdbcompression:rdb备份是否开启压缩
rdbchecksum:是否检查rdb备份文件的完整性

六、总结

RDB和AOF都有各自的优缺点,如果对数据安全性要求较高,在生产环境中常常结合两者使用,即混合持久化
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值