Redis缓存系列--(二)Redis持久化机制

Redis持久化机制

Redis的数据都放在内存中,如果没有配置持久化,Redis重启后数据就全丢失了,于是需要开启Redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘恢复数据

Redis持久化的方式

Redis持久化的方式分为:RDB和AOF方式。RDB持久化方式能够在指定的时间间隔对数据进行快照存储;AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候回重新执行这些命令来恢复原始数据,下面我们来具体看一下这两种持久化的使用。

RDB持久化的实现

RDB持久化的方式主要有两种方法:

  1. 客户端直接通过命令BGSAVE或者SAVE来创建一个内存快照
  • BGSAVE调用fork来创建一个子进程,子进程负责将快照写入磁盘,而父进程仍然继续处理命令
  • SAVE执行SAVE命令过程中,不再响应其他命令
  1. 在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启动的配置文件根据个人需求来配置。

posted @ 2020-10-27 17:09  爪哇洋  阅读(244)  评论(0编辑  收藏  举报