1.RDB方式
RDB方式的持久化是通过快照完成的,当符合一定条件时redis会自动将内存中的所有数据生成一份副本并存储在硬盘上,这个过程即为快照。redis会在以下几种情况下对数据进行快照:
- 根据配置规则
- 执行save或bgsave命令
- 执行flushall命令
- 执行复制
1.1根据配置规则进行自动快照
同时存在多个条件,条件之间是或的关系。save 900 1的意思是900秒内有一个或一个以上的键被更改则进行快照。redis会默认将快照文件存储在当前进程中的工作目录中的dump.rdb文件中,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。
1.2 save命令
当执行save命令时,redis同步地进行快照操作,在快照执行的过程中会阻塞所有来自客户端的请求。当数据库的数据比较多时,这一过程会导致redis较长时间不响应,所以要尽量避免在生产环境中使用这一命令。
1.3 bgsave命令
需手动执行快照时推荐使用bgsave命令。bgsave命令可以在后台异步地进行快照操作,快照的同时服务器还可以继续响应来自客户端的请求。
2. AOF
默认情况下redis没有开启AOF(append only file)方式的持久化。修改appendonly参数启用
AOF和RDB文件位置相同,都是通过dir参数设置得,默认文件名是appendonly.aof。
在redis中可以通过修改appendfsync参数设置同步的时机:
no表示不主动进行同步操作,而是完全交由操作系统来做(每30秒一次)。
redis-check-aof --fix appendonly.aof:修复aof文件。
redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。此时重新启动Redis后redis会使用AOF文件来恢复数据,因为AOF方式的持久化可能丢失的数据最少。