Redis支持两种方式的持久化,RDB和AOF。RDB会根据指定的规则“定时”将内存中的数据存储到硬盘上,AOF会在每次执行命令后将命令本身记录下来。两种持久化方式可以单独使用其中一种,但更多情况下是两种结合使用。
二、RDBRDB方式的持久化是通过快照完成的,当符合一定条件的时候Redis会自动将内存中的所有数据生成一份副本并存储在硬盘上,这个过程即为“快照”。Redis会在以下四种情况下对数据进行快照:
根据配置规则进行自动快照;
用户指定SAVE或BGSAVE命令;
执行FLUSHALL命令;
指定复制时;
1.根据配置规则进行自动快照
Redis允许用户自定义快照条件,当符合快照条件的时候,Redis会自动进行快照操作。进行快照的条件可以由用户的配置文件中自定义,有两个参数构成:时间窗口M和改动的键的个数N。每当时间M内被更改的键的个数大于N时,即符合自动快照的条件。例如Redis的安装目录中包含的样例配置文件中预置的3个条件:
每条快照条件占一行,并且以save参数开头。同时可以存在多个条件,条件之间是or的关系。就这个例子来说,save 900 1 的意思是在十五分钟内(900秒)内有一个或者以上的键被更改则进行快照。同理,save 300 10 表示在300秒内至少有十个键被修改则进行快照。
2.用户指定save或bgsave命令
除了让Redis自动进行快照外,当进行服务重启、手动迁移以及备份时我们也会需要手动执行快照操作。Redis提供了两个命令:
save:当执行save命令的时候,Redis同步地进行快照操作,在快照执行地过程中阻塞所有来自客户端的请求。当数据库中的数据比较多的时候,这一过程会导致Redis较长时间不能响应,所以要尽量避免在生产环境使用。
127.0.0.1:6379> save OK