title: 【学习之路】Redis持久化
draft: true
tags:
- 学习之路
- Redis
categories: - 中间件
- Redis
cover: https://cdn.jsdelivr.net/gh/codezixuan/Blog_Images/Redis配置文件/t01c78b98986b4dfa20.jpg
description: Redis持久化中RDB与AOF内容
abbrlink: 4b52b895
date: 2021-03-12 15:06:50
Redis持久化之RDB(Redis DataBase)
RDB概述
在指定的时间间隔将内存中的数据快照写入磁盘,恢复时也是将快照文件直接读取到内存中
Rdb保存文件名称是dump.rdb
配置文件位置:SNAPSHOTTINGd
RDB Fork
Fork的作用是复制一个与当前进程一样的进程,新的进程所有的数据都与原进程保持一致,并作为原进程的子进程
如何使用RDB
- save 900 1 表示900秒内如果有一个key值变化就保存
- save 300 10 表示300秒内如果有10个key值变化就保存
- save 60 10000 表示60秒内如果有一万个key值变化就保存
如何恢复
- 将备份文件dump.rdb移动到Redis目录下即可恢复
- 使用 CONFIG GET dir获取目录
- 使用save命令:save命令只会进行保存,当有写入操作时不予理会,全部阻塞
- 使用bgsave命令:Redis会在后台异步进行快照操作,快照的同时还可以响应客户端请求。可以通过lastsave命令来获取最后一次请求的快照的时间
执行flushall命令,也会产生dump.rdb文件,但里面是空的,没有意义
RDB配置文件设置
- stop-writes-on-bgsave-error:默认值为yes 设置为no表示不在乎数据一致性
- rdbcompression:对于磁盘中的快照,设置是否进行压缩储存,如果是的话Redis会使用LZF算法进行压缩,如果不想损耗CPU性能,可以关闭这个功能
- rdbchecksum:默认值为yes,在储存快照后让redis使用CRC64算法进行数据校验,此选项会有10%性能损耗
- dbfilename:设置快照文件名,默认为:dump.rdb
- dir:设置快照文件的存放路径
RDB的优势
适合大规模数据恢复但是对数据和完整性和一致性的要求不高
RDB的劣势
- 在一定时间间隔做一次备份,如果在这次备份时间之前Redis服务出错,那么就会丢失最后一次快照文件的所有修改,数据丢失风险更大
- RDB需要经常fork子进程来保存数据,当数据量比较大的时候fork是非常耗时的
如何停止RDB
动态所有停止RDB保存规则的方法:redis-cli config set save ""
Redis持久化之AOF(Append Only File)
AOF概述
AOF以日志的形式来记录每个写的操作,将Redis执行过的所有写指令记录下来(读取操作不记录),只允许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,Redis重启之后就是重新根据日志文件将写指令从前到后执行一遍
保存的文件名称:appendonly.aof
配置文件位置:APPEND ONLY MODE
如何使用AOF
在Redis.conf中appendonly默认为yes AOF默认已经开启,在Redis安装目录下会生成appendonly.aof文件,只要Redis服务启动就会生成appendonly.aof文件
AOF文件也会写入Flushall命令,但一般不会这么做
如何恢复
- 正常恢复:Redis启动之后就是重新根据日志文件将写指令从前到后执行一遍
- 异常恢复:使用redis-check-aof —fix aof配置文件名称,来修复aof文件
判断Redis默认读取AOF文件还是RDB文件
- 打开AOF文件在最末端随便输入字符破坏AOF文件再启动服务
再次启动Redis启动失败代表Redis默认先读取AOF文件
- 在Redis的配置文件中也说明了AOF与RDB可以共存并且默认读取AOF文件
AOF配置文件
- appendonly:是否打开AOF
- appendfilename:AOF配置文件名称
Appendfsync
- Always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
- Everysec:出厂默认推荐,异步操作,每秒记录 如果一秒内宕机,有数据丢失
- NO从不同步
- No-appendfsync-on-rewrite:重写时是否可以运用Appendfsync,用默认no即可,保证数据安全性
- Auto-aof-rewrite-min-size:设置重写的基准值
- Auto-aof-rewrite-percentage:设置重写的基准值
AOF优势
- 通过appendfsync everysec设置进行异步操作可能会有少量数据丢失但是性能较好
- 通过appendfsync always设置同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
AOF劣势
- 在相同的数据而言AOF文件大小要远大于RDB文件,恢复速度也要慢于RDB
- AOF运行效率要慢与RDB,appendfsync everysec同步策略较好,不同效率和RDB相同