05.23 Redis持久化方案

redis提供了2种持久化方案,一种是rdb方式,一种是aof方式

rdb持久化方式

rdb持久化有3总实现

  1. 通过配置文件设置rdb持久化

  2. 通过redis命令save进行持久化

  3. 通过redis命令bgsvae进行持久化

而1、3的实现方案是一样的,只不过触发方式不一样

1、3的实现方案为:redis fork一个子进程,子进程会dump数据到rdb文件。

fork操作是有内存拷贝的,如果进程数据量过大,那么fork就会占用较多时间。不止如此,redis是单进程单线程模式,在fork的过程中redis就会阻塞set/get等所有的redis操作请求,会导致服务短时不可用。

说完1、3的实现方案,我们再看看2的实现方案,这种模式的持久化是在redis主进程中执行的,并不会fork新的进程,所以这种模式在线上用的比较少。

aof持久化方式

AOF 则以协议文本的方式,将所有对数据库进行过写入的命令(及其参数)记录到AOF文件,以此达到记录数据库状态的目的。AOF文件其实可以认为是Redis写操作的日志记录文件。配置如下:

appendonly yes //启用aof持久化方式

appendfsync everysec //取值可以为no,everysec,always

其中如果为no,那么写硬盘操作交由操作系统调度

如果是everysec,每秒redis生成一个子线程写硬盘

如果为always,那么每个请求都会写硬盘

aof的重写

如果redis中数据不多,但是写和更新频繁的话,那么aof日志就会很多,在这种情况下,redis提供了bgrewriteaof命令,可以将redis中数据一次性写入到新的aof文件,写入期间redis新的更新操作会被记录到内存中,待aof生成完成后继续追加。



分享到:


相關文章: