1.两种持久化方式
2. RDB
RDB是使用二进制文件生成文件的快照,保存到磁盘中。
三种触发RDB的方式:
save(同步):等生成快照成功在执行其他命令。会造成阻塞redis
bgsave(异步):执行完成以后返回"ok",然后开启一个单独线程生成快照。如果开启子进程的时间阻塞会较慢,一般fork子进程都很快。
自动:达到某个条件以后自动生成RDB文件。下面是一个rdb的配置,第一行表示900秒内改变了一条数据,第二三行不做过多解释。只要配置好了三条约束,满足其中一条会触发save。(自动生成的RDB规则不好控制,容易在频繁读写时造成save而阻塞)
RDB的缺点:
(1)备份耗时
(2)fork消耗内存
(3)磁盘性能消耗
(4)t1时间save,t2宕机了,t1-t2时间段内的数据会丢失
3.AOF
根据日志生成AOF文件。
三种AOF策略:
always:每次执行命令,都会将该命令从缓存区刷新到AOF文件中
everysec:每秒刷新一次日志。(适当保护磁盘)
no:操作系统决定什么时候刷新数据。(程序员较难控制数据的刷新)
AOF重写:
例如写入了三个:set hello 1 , set hello 2 , set hello 3。只有最后一个会生效,也就是只有set hello 3会被刷新到AOF文件中。
AOF重写命令:bgrewriteaof
AOF的重写配置:
(1)同时达到AOF重写需要的尺寸和增长率才会重写
(2)统计就是为了记录当前文件的增长尺寸大小
AOF的缺点:
(1)恢复数据较慢
4.RDB和AOF对比
同时开启RDB和AOF会优先开启AOF