• [Redis]-持久化方式


    [Redis]-持久化方式


    森格 | 2022年11月

    本文是在学习Redis中,对Redis持久化的个人总结。


    一、 持久化与Redis

    1.1 什么是持久化

    在这里插入图片描述

    持久化是一种将程序数据在瞬时状态和持久状态间的转换机制,也就是把数据保存到可永久保存的存储设备中去。

    1.2 Redis的持久化

    对于Redis持久的意义在于故障恢复,尽量Redis做cache缓存可以保存部分重要数据,但是没有持久化,一旦发现灾难性故障,就会丢失所有数据。
    在这里插入图片描述

    下面一起了解下Redis时如何实现持久化的。

    二、Redis的持久化


    2.1 RDB方式

    RDB,全称Redis Database Backup File,即Redis数据备份文件,也被称为Redis数据快照。

    1) RDB的格式

    在这里插入图片描述
    相关参数

    在这里插入图片描述

    2) RDB的执行

    手动执行

    通过save执行,但该命令由Redis主进程执行,由于Redis是单线程的,所以会阻塞其他命令。

    自动执行
    在这里插入图片描述

    这种方式基于Redis的主动停机,对于宕机不会执行。

    周期执行
    在这里插入图片描述

    在Redis的配置文件redis.conf中可以看到RDB的触发机制(快照规则)。

    3)RDB原理

    在这里插入图片描述
    简单来说,由父进程fork派生出一个子进程,由子进程来生成临时的RDB文件,再进行写入到正式RDB文件。

    4)RDB优缺点

    优点:

    ● 占用空间小,RDB为二进制文件且可以压缩。
    ● Redis性能最大化,父进程只需要fork一个子进程,其他工作都由子进程操作。

    缺点:

    ● 数据不完整,Redis异常退出时,最后一次快照之后的数据丢失。
    在这里插入图片描述

    2.2 AOF方式

    AOF,Append Only File(追加文件),也就是说,Redis会将执行的写入命令都记录在文件中,这种方式就是AOF。
    在这里插入图片描述

    1) AOF参数

    开关,文件名
    在这里插入图片描述

    记录频率
    在这里插入图片描述

    2) 执行频率对比

    no
    性能最高,安全性最低。写入和保存由主进程执行,存在写入阻塞,没有保存阻塞,因为保存发生在AOF关闭或Redis关闭时执行;如果中途停机,丢失数据量由操作系统OS的缓存刷洗策略决定。

    everysec
    兼顾性能和安全性。写入由主进程执行,阻塞主进程,保存由子进程执行,不直接阻塞主进程;最多会丢失1秒数据。

    always
    安全性最高,性能最差。写入和保存由主进程执行,虽然数据可靠性高,但同步刷盘,造成服务器可能长时间阻塞,极大拉低了性能。

    频率配置项刷盘时机优点缺点
    no操作系统决定性能最佳可靠性最差,可能丢失大量数据
    everysec每秒刷盘兼容性能与安全性最多丢失1秒数据
    always同步刷盘数据可靠性最佳性能最差

    3) AOF原理
    在这里插入图片描述
    AOF文件瘦身

    在这里插入图片描述
    在这里插入图片描述

    4) AOF优缺点

    优点

    ● 性能高,数据丢失少。默认刷盘策略为每秒一次,最多丢失1秒的数据。

    缺点

    ● 文件体积大。对相同数据集,AOF的体积要大于RDB

    三、 总结


    最后,用图表对本文上述内容做简单总结:

    RDBAOF
    持久化原理对内存做快照记录每一次的命令
    文件大小压缩后文件体积小相对RDB文件体积较大
    数据完整性不完整,丢失两次快照之间的数据相对完整,最多丢失1秒的数据
    数据恢复优先级低,因为数据完整性不如AOF小高,数据完整性高
  • 相关阅读:
    python:网络安全攻击与防御的工具(附零基础学习资料)
    【Leetcode刷题】搜索插入位置
    线性表(顺序表和链表)
    护眼灯买哪种好,五款热门专业护眼台灯推荐
    SD NAND对比TF卡优势(以CSNP4GCR01-AMW为例)
    面试官:Redis的各项功能解决了哪些问题?
    【路径规划】基于遗传算法求解固定的开放式多旅行推销员问题(M-TSP)附matlab代码
    MySQL数据库用户管理
    JavaScript基础大总结
    S32K144的GPIO使用
  • 原文地址:https://blog.csdn.net/liangsena/article/details/128076845