意外的断电
会出现(防止我们丢东西的情况)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ke8g7Zo-1661244512723)(en-resource://database/5159:1)]
自动备份,自动恢复
其实就是把内存中的文件与硬盘中的文件做一个关联。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzMTKWn8-1661244512724)(en-resource://database/5161:1)]
redis也有这样的操作:因为redis丢东西会很麻烦。
什么是持久化
利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。
为什么要进行持久化
防止数据的意外丢失,确保数据安全性
持久化过程保存什么
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TPQ5elB1-1661244512725)(en-resource://database/5165:1)]
Redis中两种方式都在用。
第一种方式:数据当前的形式全部保存起来,出问题后直接使用其恢复:数据(快照)
第二种方式:保存数据操作的过程:过程(日志)
RDB启动方式
谁,什么时间,干什么事情
RDB启动方式–save指令
看redis空间中是否有数据
keys *
每保存(save)一次,会在设定好的目录下data,生产一个.rdb文件(但是我的没有,不知道为什么)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gw2IlUIH-1661244512725)(en-resource://database/5167:1)]
RDB启动方式–save指令相关配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S0HReCH1-1661244512725)(en-resource://database/5169:1)]
在conf目录下修改配置
vim redis-6379.conf
查看进程
ps -ef | grep redis-
结束进程
kill -s 9 1109
开启进行进程(修改配置文件后,需要重启进程)
redis-server conf/redis-6379.conf
如何恢复数据
退出客户端
杀死进程
kill -s 9 4155
重启进程
redis-server conf/redis-6379.conf
查看进程
ps -ef | grep redis-
杀死进程后重启进程,连接客户端发现上次创建的数据会还存在(在redis启动时,数据就已经加载进来了)
keys *
RDB启动方式–save指令工作原理
redis是单线程的,多个指令save(有时太长)指令会阻塞服务器,线上环境不建议使用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rjxbfxyk-1661244512726)(en-resource://database/5171:1)]
第二种RDB的工作方式,能够较好的解决这个问题
【提问】数据量过大,单线程执行方式造成效率过低如何处理?
使用【后台执行】
【bgsave指令】
【bgsave指令工作原理】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zSMxknnR-1661244512726)(en-resource://database/5175:1)]
save是马上执行,在任务执行序列中;bgsave利用函数创建的子进程执行,是后台执行【save命令可以放弃使用,bgsave是针对save阻塞问题的优化】
RDB启动方式–bgsave指令相关配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0bAIjc05-1661244512727)(en-resource://database/5177:1)]
存储的时候出错时,是否停止,默认是开启的。
【提问】反复执行保存命令,忘记了怎么办?不知道数据产生了多少变化,如何保存?
第三种执行:自动执行
【save配置】
修改配置
cd conf/
save配置原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2hyoAVIV-1661244512727)(en-resource://database/5179:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAIeoCQ4-1661244512727)(en-resource://database/5181:1)]
rdb特殊启动形式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QcNC44vw-1661244512727)(en-resource://database/5183:1)]
RDB的优缺点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBIln0gs-1661244512728)(en-resource://database/5185:1)]
RDB存储的弊端
基于以上问题:那么问题是否可以解决呢?
解决思路:
AOF概念
AOF写数据过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RqlU8KQL-1661244512728)(en-resource://database/5187:1)]
AOF写数据三种策略(appendfsync)
AOF功能开启
进入conf文件去修改配置文件XXX.conf
演示:
vim redis-6379.conf
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u8Go3zcw-1661244512728)(en-resource://database/5189:1)]
启动redis:redis-server redis-6379.conf 【root下】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pEI9v6v0-1661244512729)(en-resource://database/5191:1)]
到客户端连接一下:redis-cli
always是每次执行改变的命令,就会在AOF文件中同步一下。
改一下配置文件:appendfsync everysec 每秒一次,太快了,几乎看不出always的区别
进程重启一下
ps -ef | grep redis-
kill -s 9 3776
再次启动redis:redis-server redis-6379.conf
还有一个配置:文件名的自定义
配置:appendfilename filename
作用:
配置:dir
作用:
【如果连续执行如图指令该如何处理】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ir9lfIuy-1661244512729)(en-resource://database/5193:1)]
AOF重写
随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程。简单说就是将同一个数据的若干条命令执行结果转换成最终结果数据对应的指令进行记录。这个重新整理的过程就是AOF重写。
AOF重写作用
AOF重写规则
进程内已超时的数据不再写入文件
忽略无效指令,重写时使用进程内数据直接生成,这样新的AOF文件只保留最终数据写入命令。
对同一数据的多条写命令合并为一条命令
AOF重写方式
演示:
工作原理
AOF手动重写工作原理–bgrewriteaof指令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jp0rAwtm-1661244512731)(en-resource://database/5207:1)]
AOF自动重写方式
AOF工作流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ia3hJdig-1661244512732)(en-resource://database/5211:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-goFAKhBh-1661244512732)(en-resource://database/5213:1)]
RDB VS AOF

——此文档为学习笔记!