Redis之持久化RDB、AOF

为了Redis能够将内存中的数据同步到硬盘中,使得重启后可以根据硬盘中的记录恢复数据,这叫做持久化。
持久化有两种方式,一种是RDB,一种是AOF。前者根据指定的规则“定时”进行保存到磁盘上,后者是在每次执行命令后将命令本身记录下来,有三种策略可以选择,一种是每次写入一条数据就执行一次fsync; 一种是每隔一秒执行一次fsync; 一种是不主动执行fsync。
关于生产环境持久化配置的详细介绍可以查看:生产环境redis搭建

快照原理

Redis之持久化RDB、AOF
Redis之持久化RDB、AOF

RDB
  • 根据规则进行自动快照
    配置文件中定义,时间窗口M和改动键的个数N,每当时间M内改动键数超过N,则自动快照。
  • 用户执行save或者bgsave命令
    save,redis同步进行快照操作,快照执行过程中阻塞所有来自客户端的请求,当数据较多的时候导致redis较长时间不相应,生产环境应避免使用。
    bgsave,推荐,后台异步进行快照操作,快照的同时服务器可以继续相应来自客户端的请求。lastsave 会返回最后一次快照时间,可以判断快照是否完成。
  • 执行flushall命令
    flushall,redis清空数据库中的所有数据。只有有定义自动快照条件,就算只有一个键,也会触发快照,如果没有定义自动快照条件,则不会触发。
  • 执行复制(replication)
AOF
  • 重写策略
    aof写入命令很多,有重写策略
    Redis之持久化RDB、AOF
  • 同步硬盘数据
    每次更改数据库数据,aof都会将命令记录在aof文件,事实上,因为操作系统的缓存机制,数据并没有真正写入,而是进入系统的硬盘缓存。
    Redis之持久化RDB、AOF
    部分内容摘自《Redis入门指南》