目录
一、持久化
前言
Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能 !
RDB和[AOP]解决的问题
由于redist是内存型数据库,有时候可能出现redis挂掉而导致缓存丢失的问题,RDB 和 AOF 都是为了解决这个问题,也是redis官方提出的两种数据持久化方案
1、AOF
磁盘文件在虚拟机中:/var/lib/redis/6379/appendonlydir目录下,后缀名为.aof的文件,set的数据都在该文件里面
1)AOF是什么
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
2) AOF持久化流程
磁盘文件在虚拟机中:/var/lib/redis/6379/appendonlydir目录下,后缀名为.aof的文件
(1)客户端的请求写命令会被append追加到AOF缓冲区内;
(2)AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中;
(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量;
(4)Redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的;
3)特点:
1、所有的写操作都会记录到磁盘文件中
2、RDB与AOF可以同时开启,但恢复时只会使用AOF
3、AOF体量无限大,因为AOF只会append不会repace,所以恢复就会很慢
解决AOF体量无限大的问题:
1、hdfs:fsimage+edit.log让日志只记录增量合并的过程
2、4.0前:删除抵消的命令,合并重复的命令,最终是一个命令文件
3、4.0后:将老的数据RDB到AOF文件中,将增量的以指令的形式append到AOF
## 1、AOF
############################## APPEND ONLY MODE ###############################
#是否开启aof
#appendonly yes
appendonly no # 默认是不开启aof模式的,默认是使用rdb方式持久化的,在大部分所有的情况下, rdb完全够用!
# aof文件名字
appendfilename "appendonly.aof"
#写操作会触发IO,可以调整配置文件如下三种策略:下面7、aof同步频率设置详细讲解
# appendfsync always # 每次修改都会 sync。消耗性能
# appendfsync no # 不执行 sync,这个时候操作系统自己同步数据,速度最快!
appendfsync everysec # 每秒执行一次 sync,可能会丢失这1s的数据!
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100 #写入百分比
auto-aof-rewrite-min-size 64mb#写入的文件最大值是多少,一般在实际工作中我们会将其设置为5gb左右!
aof-load-truncated yes
12345678910111213141516
4、 AOF默认不开启
可以在redis.conf中配置文件名称, 默认为 appendonly.aof
AOF文件的保存路径,同RDB的路径一致。/var/lib/redis/6379/appendonlydir
5、 AOF和RDB同时开启,redis听谁的
AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失)
6、 AOF启动修复恢复
我们可以使用redis-check-aof文件来进行修复!这个不能恢复全部数据,有毛病的
redis-check-aof --fix appendonly.aof #修复appendonly.aof文件
1.AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。
2.正常恢复
1、只需将备份的aof文件放在我们的redis启动目录即可,Redis启动的时候会自动检查appendonly6379.aof.1.incr.aof文件并恢复其中的数据!
2、查找文件位置的命令:
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/bin" # 如果在这个目录下存在 appendonly6379.aof.1.incr.aof 文件,启动就会自动恢复其中的数据,把要恢复的文件复制到给目录下然后重写启动
修改默认的appendonly no,改为yes
将有数据的aof文件复制一份保存到对应目录(查看目录:config get dir)
恢复:重启redis然后重新加载
3.异常恢复
修改默认的appendonly no,改为yes
如遇到AOF文件损坏