为了Redis能够将内存中的数据同步到硬盘中,使得重启后可以根据硬盘中的记录恢复数据,这叫做持久化。
持久化有两种方式,一种是RDB,一种是AOF。前者根据指定的规则“定时”进行保存到磁盘上,后者是在每次执行命令后将命令本身记录下来,有三种策略可以选择,一种是每次写入一条数据就执行一次fsync; 一种是每隔一秒执行一次fsync; 一种是不主动执行fsync。
关于生产环境持久化配置的详细介绍可以查看:生产环境redis搭建
快照原理
RDB
- 根据规则进行自动快照
配置文件中定义,时间窗口M和改动键的个数N,每当时间M内改动键数超过N,则自动快照。 - 用户执行save或者bgsave命令
save,redis同步进行快照操作,快照执行过程中阻塞所有来自客户端的请求,当数据较多的时候导致redis较长时间不相应,生产环境应避免使用。
bgsave,推荐,后台异步进行快照操作,快照的同时服务器可以继续相应来自客户端的请求。lastsave 会返回最后一次快照时间,可以判断快照是否完成。 - 执行flushall命令
flushall,redis清空数据库中的所有数据。只有有定义自动快照条件,就算只有一个键,也会触发快照,如果没有定义自动快照条件,则不会触发。 - 执行复制(replication)
AOF
- 重写策略
aof写入命令很多,有重写策略:
- 同步硬盘数据
每次更改数据库数据,aof都会将命令记录在aof文件,事实上,因为操作系统的缓存机制,数据并没有真正写入,而是进入系统的硬盘缓存。
部分内容摘自《Redis入门指南》