一、RDB
RDB持久化是通过快照完成的,当符合一定条件时Redis会自动将内存中所有数据生成一份副本并存储在硬盘上,这一过程即为快照。Redis会在以下几种情况对数据进行快照。
1、根据配置进行自动快照
配置文件中预置了3个条件
save 900 1
save 300 10
save 60 10000
各个条件是或的关系,当在多长时间之内更改了大于n个键,即符合快照条件
2、用户执行SAVE或BGSAVE命令
SAVE:数据较多时,会导致较长时间不响应
BSAVE:在后台异步进行快照,不影响来自客户端的请求。用LASTSAVE命令获取最近一次成功执行快照的时间
3、执行FLUSHALL命令
执行FLUSHALL会清除所有数据,不论是否触发了自动快照条件,只要自动快照条件不为空,就会执行一次快照操作。
4、执行复制时
二、AOF方式
AOF可以将Redis执行的每一条命令追加到磁盘中的AOF文件当中。
1、开启:appendonly yes
auto-aof-rewrite-percentage 100 目前的AOF文件大小超过上一次重写时的AOF文件大小的百分比时会再次进行重写
auto-aof-rewrite-min-size 64mb 限制了允许重写的最小AOF文件大小
2、同步硬盘
由于操作系统的缓存机制,数据并没有真正写入硬盘,而是在硬盘的缓存当中,默认情况下系统每30秒会执行一次同步操作,系统异常退出会导致数据丢失,AOF应该主动要求将缓存同步到硬盘。
appendfsync always 每次执行写入都会执行同步
appendfsync everysec 第秒执行同步
appendfsync no 由操作系统来作同步(30秒)