redis持久化
Redis支持RDB和AOF两种持久化机制,持久化功能有效避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化生成的文件即可实现数据恢复
一.RDB持久化
1.RDB是什么
RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发
1.1 认识
RDB是一个紧凑压缩的二进制文件,在.conf文件中save 100 1,是每间隔100s,会检测这100s之内是否有一个写入操作,如果有,100s后会将写入的数据写入到.rdb文件中,替换原来的rdb文件,但是如果100s内redis服务断了,也不会触发事件,这就造成数据丢失
1.2 触发机制
手动触发分别对应save和bgsave命令:
save命令:阻塞当前Redis服务器,知道RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,先上环境不建议使用。运行save命令对应Redis日志如下:
DB saved on disk
bgsave(Background save)命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一段时间很短。运行bgsave名字对应的Redis日志如下:
Background saving started by pid 3152
DB saved on disk
RDB: 0MB of memory userd by copy-on-write
Background saving terminated with success
2.配置文件
创建rdbdump.conf文件,文件写入以下内容
daemonize yes #后台运行
port 6379 #指定端口
logfile /data/6379/redis.log #指定日志路径
dir /data/6379 #redis的数据文件,会存放在这里(此文件夹需要先创建)
dbfilename s24dbmp.rdb # 开启rdb持久化,且指定持久化文件的名字
bind 0.0.0.0
save 900 1 #每隔900s,会检测900s之内是否有1次写入数据操作,如果有,则存入
save 300 10
save 60 10000
指定conf文件启动redis
redis-server rdbdump.conf
此时再进入redis客户端,输入 写命令(set key value),900s之后,会自动生成s24dbmp.rdb文件,此时再手动关闭进程(pkill -9 redis-server),再重新启动redis-server服务,会读取s24dbmp.rdb文件,再开redis-cli客户端,检查之前的数据,仍在。
二.AOF
1. AOF是什么
在了解AOF之前,先来解释以下为什么要有AOF?
我们知道,在rdb持久化的conf文件中有:save 90 1 ,意思是,在90s之内,如果有一次写操作,第90s会触发save命令,生成rdb文件,但是,如果是在第5s写入数据,第10s服务断开,那么第90s也无法持久化,因此推出了AOF持久化,用来解决这种问题
AOF文件记录了所有的增删改操作指令,当服务断开然后重启时,会自动读取AOF文件所有指令,全部再执行一遍,用来生成数据,因此AOF的文件会比rdb文件大。
2.配置文件
新建aof.conf
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
appendonly yes #开启aof的俩参数
appendfsync everysec #aof的持久化机制,每s往aof文件中追加
指定aof文件启动redis
redis-server aof.conf
三.不重启,切换rdb为aof
1.首先,当前库的配置模式为rdb
2.通过命令,直接切换为aof
127.0.0.1:6379> CONFIG set appendonly yes #开启AOF功能
OK
127.0.0.1:6379> CONFIG SET save "" #关闭RDB功能
OK
3.正确情况下,会生成aof日志文件了,此时命令操作都是在aof里面了
4.还得修改配置文件,以上命令只是临时生效,改完以后,下次指定配置文件启动,就一直是aof了
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dbmp.rdb
save 900 1
save 300 10
save 60 10000
daemonize yes
appendonly yes
appendfsync everysec