redis持久化策略

由于redis是内存数据库,所有的数据都保存在内存中,内存当中的数据极易丢失,所以redis的持久化就显得尤为重要,在redis中提供两种持久化方式,分别为RDB和AOF,且redis默认开启的数据持久化方式为RDB方式。

RDB持久化方式:

redis会定期保存数据快照到rdb文件中,并在启动时自动加载rdb文件,恢复之前保存的数据。可以在配置文件中配置Redis进行快照保存的时机:

save [seconds] [changes]

意为在seconds秒内如果发生了changes次数据修改,则进行一次RDB快照保存。

save和bgsave会进行rdb快照,save阻塞客户请求,bgsave异步进行,fork子进程进行,采用写时复制技术,就是最严重的情况是,bgsave时内存会翻倍,所以不能将所有的内存都分配给redis。

AOF持久化方式:

采用AOF持久化方式,会把每一个写操作都记录在日志中,在redis重启时,会把AOF文件中左右的操作都执行一遍。

AOF默认时关闭的,如要开启,进行如下配置:

appendonly yes

配置AOF

appendfsync always  //总是写盘
appendfsync everysec  //每秒写盘 

appendfsync no  //操作系统自动写盘

AOF reWrite随着AOF不断的记录写操作日志,必定会出现一些无用日志,redis提供AOF reWrite功能,重写的策略是当AOF reWrite配置如下:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

优缺点比较:

RDB更高效,容易丢失数据,AOF alway数据不会丢失,更安全,但是效率低一些,aof文件往往更大。

Redis在fork子进程时需要将内存页表拷贝到子进程(写时复制技术),以占用24GB的redis实例为例,共需要拷贝48MB的数据,,在单xeon 2.27Ghz的物理机上,这一fork操作耗时216ms。

你可能感兴趣的:(redis,redis,数据库)