【Chapter-6】Redis持久化

【Chapter-6】Redis持久化

持久化

为了保证数据的安全,redis还提供了将数据持久化到磁盘中的机制。redis提供了两种数据持久化类型:RDB和AOF

  • RDB:可以看做是redis在某一个时间点上的快照,非常适合于备份和灾难恢复。默认开启

  • AOF:是一个写入操作的日志,将在服务器启动时被重放。默认关闭

使用RDB

RDB默认是开启的,如果要禁用只需要注释掉配置文件中的save选项

save 900 1
save 300 10
save 60 10000

我们可以在redis的数据目录中查看是否生成了rdb文件dump.rdb

我们可以手动执行RDB快照,在redis-cli中调用save命令即可。redis-cli会被阻塞一段时间

[root@wms-redis-test-1 redis]# bin/redis-cli
127.0.0.1:6379> save
OK

或者我们可以执行bgsave命令来执行非阻塞的rdb转储,启动新进程转储

127.0.0.1:6379> bgsave
Background saving started

RDB工作原理

RDB就像是一台专门给redis数据拍照的照相机,当满足触发策略时,redis就会通过将所有的数据转存到本地磁盘上一个文件的方式给redis的数据拍一张照片。 我们来解释一下save参数的含义,save参数决定了RDB触发策略,这个值的格式是x1,y1,x2,y2,x3,y3... 其含义是,如果超过y个键发生改变且此时没有转储正在发生,则在x秒后进行数据转储

可以同时使用多个策略来控制RDB快照的执行频率

save 900 1 #如果在900秒内有超过1个key发生了改变,则会进行一次RDB快照
save 300 10
save 60 10000

可以通过save或bgsave命令手动执行一次RDB快照,区别在于前者使用主线程同步转储,后者使用新线程异步转储

RDB恢复

  1. 要还原RDB快照,我们需要把快照文件(dump.rdb)复制到dir选项指定的位置,并保证启动redis实例的用户有该文件的读、写权限

  2. 我们需要通过shutdown nosave 命令停止实例

  3. 将新转储文件(要恢复的.rbd文件)重命名为dbfilename选项定义的名字,重新启动后,数据会从备份文件中加载并还原回redis了

使用AOF

RDB持久化并不能提供强的一致性 AOF(append-only file)是一种只记录redis写入命令的追加式日志文件。因为每个写入命令都会被追加到文件中,所以AOF的数据一致性比RDB更高。

AOF默认是关闭的,如果要开启AOF。可以在redis的配置文件中开启appendonly yes,然后重启reddis-server

使用info persistence判读是否启动了AOF功能,也可以检查数据目录是否生成了AOF文件

[root@wms-redis-test-1 redis]# ll
total 1724
-rw-r--r-- 1 root root      56 Oct  9 23:43 appendonly.aof #写入命令的追加文件
drwxr-xr-x 2 root root    4096 Oct  8 01:56 bin
drwxr-xr-x 2 root root    4096 Oct  9 23:42 conf
-rw-r--r-- 1 root root     109 Oct  9 23:44 dump.rdb #数据快照文件
drwxr-xr-x 2 root root    4096 Oct  9 22:59 log
drwxrwxr-x 6 root root    4096 Aug  3 18:44 redis-4.0.11
-rw-r--r-- 1 root root 1739656 Aug  3 18:46 redis-4.0.11.tar.gz

修复aof文件bin/redis-check-aof --fix appendonly.aof

同事使用RDB和AOF

  • RDB默认开启

  • AOF手动开启

save 900 1
save 300 10
save 60  10000
appendonly yes     # 只有这一项是需要改的
appendfilename "appendonly.aof"
appendfsync everysec
aof-use-rdb-preamble yes # AOF和rdb混合使用开关,需要手动改为yes,混合使用和同时使用是有区别的,混合使用可以节省开销同时发挥更好的优势

Last updated

Was this helpful?