一、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都有各自的优缺点,如果对数据安全性要求较高,在生产环境中常常结合两者使用,即混合持久化