首页 > 代码库 > 八、Redis 基础命令---管理--持久化--RDB

八、Redis 基础命令---管理--持久化--RDB

1、Redis 支持两种方式的持久化,一种是RDB , 一种是AOF 。可用单独使用也可以二者结合使用。

2、RDB
     A、RDB方式是Redis默认采用的持久化方式,通过快照(snapshotting)完成的。当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在整个硬盘上。进行快照的条件:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。
     
     B、配置文件中已经预先设置了3个条件:
          save 900 1
          save 300 10
          save 60 10000

     C、save参数指定了快照条件,可以存多个条件,条件之间是“或”的关系。 如上,在900秒内至少一个键被更改就进行快照。时间单位是秒

     D、Redis默认会将快照文件存储在当前目录的dump.rdb文件中,也可以通过 dir 和 dbfilename 两个参数分别指定快照文件的存储路径和文件名。

     E、Redis实现快照的过程:
          1)Redis使用fork函数复制一份当前进程(父进程)的副本(子进程)
     
          2)父进程继续接受并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件

          3)当子进程写入完所有数据后,会用该临时文件替换旧的RDB文件,至此一次快照操作完成。

     F、在执行fork的时候操作系统会使用写时复制(copy-on-write)策略,即fork()函数发生的那一刻父子进程共享同一内存空间,当父进程要更改某一片的数据时(如执行写命令),操作系统会将该片数据复制一份以保证子进程的数据不受影响,所以新的RDB文件存储的是fork()那一刻的内存数据。

     G、Redis是在快照结束后才会将旧的RDB文件替换成新的,也就是说任何时候RDB文件都是完整的。这时我们就可以通过备份RDB文件来实现Redis数据的备份。
     
     H、RDB文件是经过压缩的二进制格式,所以占用的空间小于内存中的数据大小,更加利于传输。也可以设置redcompression参数以禁用压缩。

     I、手动Redis执行快照命令:SAVE \ BGSAVE ,区别是:前者是由主进程进行快照操作,会阻塞住其他请求,后者会通过fork子进程进行快照操作。
     
     J、Redis启动后会读取RDB快照文件,将数据从硬盘载入内存。

     K、RDB方式持久化数据,一旦Redis异常退出,就会失去最后一次快照以后更改的数据。如果数据很重要以至于无法承受任何损失,可以使用AOF进行持久化。     










八、Redis 基础命令---管理--持久化--RDB