#什么是持久化
将数据从掉电易失的内存存到能永久储存的设备上 (将内存中的数据存到硬盘中 称为持久化)
#redis为什么需要持久化
用redis 做缓存的时候可以不需要持久化, 如果把它作为一为内存数据库的时候 需要做持久化 ,消息队列也需要做持久化(list 先进先出)
#redis 持久化方式
RDB (Redis DB)
AOF (AppendOnlyFile)
RDB
在默认情况下,redis将数据库快照保持在名字为 dump.rdb 的二进制文件中
策略
自动:按照配置文件中的条件满足就执行 bgsave
save 60 1000,Redis 要满足 60秒内 一千个键被改动的时候执行自动保存一次
手动:客户端发起SAVE ,BGSAVE 命令
BGSAVE 命令
1.redis > bgsave
2.非阻塞,redis 服务正常接收处理客户端请求
3.Redis 会folk()一个新的子进程来创建RDB文件,子进程处理完后 向父进程发送一个信号,通知它处理完毕
4. 父进程用dump.rdb 替代旧文件
{客户端} -》(save) {redis 服务器} -》(创建){RDB文件}
保存的是 二进制数据 rdb 是一个二进制文件
SAVE 命令 和BGSAVE命令
Save 不用创建新的进程 ,速度略快
BGsave 需要创建子进程 ,消耗额外的 内存
Save 适合停机维护 ,服务低谷时期
BGsave 适合线上执行
优点
完全备份 ,不同时间的数据集备份可以做到多版本回复
紧凑的单一文件 ,方便网络传输,适合灾难恢复
恢复大数据集速度较AOF快
缺点
会丢失最近写入,修改的而未能持久化的数据
folk 过程非常耗时 ,会造成毫秒级不能响应客户端请求