环境准备:
一台redis服务器
安装过程在Redis7.0安装
理论部分:
redis 提供了两种持久化的方式
分别是RDB(Redis DataBase)和AOF(Append Only File)。
RDB持久化三种机制:
以快照的形式持久化文件
(1)Save 客户端的请求是阻塞状态
(2)Bgsave redis产生子进程将快照文件保存到硬盘,客户端的请求不阻塞
(3)自动同步 save 300 1
AOF三种持久化机制
以文件的形式持久化,将每一条增删改操作写入文件当中
(1)每修改同步always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
(2)每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失
(3)no: 会随着操作系统的同步而同步
RDB和AOF的优缺点:
优点:
RDB:
RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
AOF:
相对于RDB,能够保证数据的安全
AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写。
AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。
缺点:
RDB:
RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。
AOF:
对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大,并且在恢复的时候也没有RDB快
实验部分:
RDB方式:
修改redis配置文件
vim /usr/local/redis/bin/redis.conf
#在434行添加save 300 1 表示 开启RDB快照功能,300秒内有1个keys变更,则触发快照功能
save 300 1
save 900 10
#448行,当RDB快照后台进程失败,不影响用户得写操作
stop-writes-on-bgsave-error yes
#454行,是否将RDB快照文件压缩,关闭后会增加性能
rdbcompression yes
#463行,关闭RDB快照文件的检查校验,增加性能
rdbchecksum yes
#481行,快照的名称
dbfilename dump.rdb
#504行,存放快照的路径(这个需要改)
dir /usr/local/redis/
重启redis
systemctl restart redis.service
登录redis,添加数据测试
redis-cli -h 192.168.100.1 -p 6379 -a 123123
#这个数据随便写
set student1 lzz
set student2 wyb
set student3 zmy
查看一下刚刚写入的数据
退出redis,重启redis
exit
systemctl restart redis.service
登录查看
redis-cli -h 192.168.100.1 -p 6379 -a 123123
数据还在,如果不在,可能没有触发save,可以在写完数据后,手动输入save在重启查看
AOF方式:
编辑配置文件
vim /usr/local/redis/bin/redis.conf
#注释掉434行的save,刚刚写入的save都要注释
#1380行,将no改为yes,这是开启AOF持久化
appendonly yes
#1407行,指定持久化的文件
appendfilename "appendonly.aof"
#1439行,频率
appendfsync everysec
#1461行,如若设置为yes,则redis执行的命令会存放到缓冲区,待系统自动同步到硬盘
no-appendfsync-on-rewrite no
#1480行,若当前写入的AOF文件达到了上次rewrite文件大小的100%,则触发rewrite操作
auto-aof-rewrite-percentage 100
#1481行,设置AOF持久化重写文件的最小值,当达到60M并且符合100%的条件时,则触发rewrite操作
auto-aof-rewrite-min-size 64mb
appendfsync 的选项
重启redis
systemctl restart redis.service
登录redis后发现数据全部消失了,这是因为:
RDB持久化的数据,当改为AOF持久化的时候,数据是无法同步的
重新写入数据
退出,查看AOF持久化文件
vim /usr/local/redis/appendonlydir/appendonly.aof.1.incr.aof
重启redis,登录查看
倘若想要RDB里边的数据,持久化到AOF,需要在RDB模式中,临时开启AOF