一、前言
Redis是内存数据库,数据都是存在内存中,内存存储很容易造成数据的丢失,因为当服务器关机等一些异常情况都会导致存储在内存中的数据丢失,为了让数据能够长期保存,就要将Redis放在缓存中的数据做持久化存储,Redis支持两种持久化方式,一种是RDB(快照)也是默认方式,另一种是AOF(Append-only file)的方式。
- RDB:在指定的时间间隔能对你的数据进行快照存储。
- AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
二、RDB简介
RDB是一种将快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件中,默认保存的文件名为dump.db,而在Redis服务器启动时,会重新加载dump.rdb文件的数据到内存当中恢复数据。 RDB功能最核心的是rdbSave和rdbLoad两个函数。
RDB持久化的触发分为两种,手动触发和定时触发。
1、手动触发:
- save:会阻塞当前Redis服务器,直到持久化完成,线上应该禁止使用
- bgsave:与save不同的是该触发方式会fork一个子进程,由子进程负责持久化过程,因此阻塞只会发生在fork子进程的时候。
2、自动触发
- 根据我们的save m n配置规则触发;
- 从节点全量复制时,主节点发送rdb文件给从节点完成复制操作,主节点会触发bgsave;
- 执行debug reload时;
- 执行shutdown时,如果没有开启aof,也会触发
配置
1 # 时间策略 2 save 900 1 3 save 300 10 # 表示300s内有10条写入,就产生快照 4 save 60 10000 5 6 # 文件名称 7 dbfilename dump.rdb 8 9 # 文件保存路径 10 dir /home/work/app/redis/data/ 11 12 # 如果持久化出错,主进程是否停止写入(保护持久化的数据一致性问题) 13 stop-writes-on-bgsave-error yes 14 15 # 是否压缩 16 rdbcompression yes 17 18 # 导入时是否检查 19 rdbchecksum yes
三、AOF简介
与RDB存储某个时刻的快照不同,AOF持久化方式会记录客户端对服务器的每一次写操作命令,并将这些写操作以Redis协议追加保存到以后缀aof文件末尾,在Redis服务器重启时,会加载运行aof文件的命令,以达到恢复数据的目的。
配置
Redis默认不开启AOF持久化方式,我们可以在配置文件redis.conf中开启并进行更加详细的配置
1 # 开启aof机制
2 appendonly yes
3
4 # aof文件名
5 appendfilename "appendonly.aof"
6
7 # 写入策略,always表示每个写操作都保存到aof文件中,也可以是everysec或no
8 appendfsync always
# appendfsync everysec
# appendfsync no
9
10 # 默认不重写aof文件
11 no-appendfsync-on-rewrite no
12
13 # 保存目录
14 dir ~/redis/