Redis持久化机制
Redis的数据都放在内存中,如果没有配置持久化,Redis重启后数据就全丢失了,于是需要开启Redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘恢复数据。
Redis持久化的方式
Redis持久化的方式分为:RDB和AOF方式
。RDB持久化方式能够在指定的时间间隔对数据进行快照存储;AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候回重新执行这些命令来恢复原始数据,下面我们来具体看一下这两种持久化的使用。
RDB持久化的实现
RDB持久化的方式主要有两种方法:
- 客户端直接通过命令
BGSAVE
或者SAVE
来创建一个内存快照
- BGSAVE调用fork来创建一个子进程,子进程负责将快照写入磁盘,而父进程仍然继续处理命令。
- SAVE执行SAVE命令过程中,不再响应其他命令。
- 在redis.conf中调整配置选项,当在规定的时间内,Redis发生了写操作的个数满足条件会触发BGSAVE命令,例如(可以同时配置多个条件的持久化动作)
# 900秒内至少一次写操作
save 900 1
# 300秒之内至少发生10次写操作
save 300 10
这里我们通过实际操作发现,对于配置
save 5 2
虽然表示5秒内如果有两次或者以上的Redis写操作,那么就会触发Redis持久化。如果在5秒内,Redis写操作只有1次,那么过了5秒是不会进行持久化保存的,但是如果在第六秒又有一次写操作,那么同样会触发数据持久化保存,也就是说如果不满足次数时,Redis会记录当前的写操作次数,直到满足条件就会触发持久化(前提是服务器不宕机,否则可能会丢失数据);如果在5秒钟内Redis写操作的次数超过了2次,到了2次之后不会立即持久化,而是过了5秒后再对写操作进行持久化,也就是说Redis是每隔5秒钟检查一次,看是否满足保存条件。
RDB方式的优点:对性能影响最小;RDB文件进行数据恢复比使用AOF要快很多
RDB方式的缺点:有丢失数据的可能(规定时间内没有符合条件,就不会保存);如果数据集非常大且CPU不够强(比如单核),Redis在fork子进程时可能会消耗相对较长的时间,影响Redis对外提供服务的能力。
AOF持久化的实现
开启AOF持久化,只需要在配置文件中添加appendonly yes
。那么AOF策略的调整有以下几种:
# 开启aof持久化
appendonly yes
# 1.每次有数据修改发生时都会写入AOF文件
appendfsync always
# 2.每秒钟同步一次,该策略为AOF的默认策略
appendfsync everysec
# 3.从不同步一次,高效但是数据不会被持久化
appendfsync no
优点:最安全,容灾,易读可修改
缺点:文件体积大,性能消耗比RDB高,数据恢复速度比RDB慢
具体的操作可以自己在Redis启动的配置文件根据个人需求来配置。