赞
踩
手动、定时、条件触发 持久化 都存在数据丢失问题
save 900 1 -- 900秒内至少有一个改动
save 300 10 -- 300秒内至少有10个改动
save 60 10000 -- 60秒内至少有10000个改动
Redis借助了linux系统的写时复制(Copy-On-Write)技术,在生成快照的同时,仍然可以接收命令处理数据。简单来说,bgsave进程是由主进程fork生成的子进程,可以共享进程程所有的内存数据。bgsave进程中的线程运行后,开始读取主进程的内存数据,也就是redis的内存数据,将内存数据写入到dump.rdb文件中。此时,如果主进程处理的命令都是读操作,则bgsave线程不受影响。如果主进程处理了写操作,则会对该命令操作的数据复制一份,生成副本,bgsave进程中的线程会把这个副本写入到dump.rdb文件中,而在这个过程中,主进程仍可执行命令。
为解决RDB方式丢失数据的问题,从1.1版本开始,redis增加了一种更加可靠的方式:AOF持久化方式。
在使用AOF方式时,redis每执行一次修改数据命令,都会将该命令追加到appendonly.aof文件中(先写入os cache,然后通过fsync刷盘)。
可以通过修改配置文件来使用AOF
aof数据格式
appendonly yes
因为appendonly.aof文件中存储的是执行命令,所以会产生很多没用的命令,因此,redis会定期根据最新的内存数据生成新的aof文件。
如下两个配置可以控制aop文件重写的频率:
auto‐aof‐rewrite‐min‐size 64mb: – aof文件至少达到了64m才会触发重写
auto‐aof‐rewrite‐percentage 100: – 距离上次重写增长了100%才会再次触发重写
AOF也可以手动触发重写:bgrewriteof
注意,AOF重写redis会fork出一个子进程去做(与bgsave命令类似),不会对redis正常命令处理有太多影响
config rewrite 会修改配置文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。