首页 > 数据库 >Redis 持久化方式

Redis 持久化方式

时间:2023-05-15 10:25:50浏览次数:41  
标签:AOF 持久 方式 Redis 命令 操作命令 日志 执行

参考:

小林coding https://xiaolincoding.com/redis/storage/aof.html#aof-%E9%87%8D%E5%86%99%E6%9C%BA%E5%88%B6

https://www.cnblogs.com/lovezhr/p/15886823.html

 

AOF(Append Only File)

如果 Redis 每执行一条写操作(不会记录读操作命令)命令,就把该命令 以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它,以此来恢复数据。

AOF 日志文件其实就是普通的文本,我们可以通过 cat 命令查看里面的内容,有着一定的格式

 

不知道大家注意到没有,Redis 是先执行写操作命令后,才将该命令记录到 AOF 日志里的,这么做其实有两个好处。

  1. 第一个好处,避免额外的检查开销。如果先执行写操作命令再记录日志的话,只有在该命令执行成功后,才将命令记录到 AOF 日志里,这样就不用额外的检查开销,保证记录在 AOF 日志里的命令都是可执行并且正确的。
  2. 第二个好处,不会阻塞当前写操作 命令的执行,因为当写操作命令执行成功后,才会将命令记录到 AOF 日志。

当然,AOF 持久化功能也不是没有潜在风险。

  1. 第一个风险,执行写操作命令和记录日志是两个过程,那当 Redis 在还没来得及将命令写入到硬盘时,服务器发生宕机了,这个数据就会有丢失的风险。
  2. 第二个风险,前面说道,由于写操作命令执行成功后才记录到 AOF 日志,所以不会阻塞当前写操作命令的执行,但是可能 会给「下一个」命令带来阻塞风险。因为将命令写入到日志的这个操作也是在主进程完成的(执行命令也是在主进程),也就是说这两个操作是同步的。

 

三种写回策略

和 mysql redo log 的 AOF 策略类似,将文件写到硬盘,需要两次系统调用:

    1. redis 在用户态中将命令追加到程序的 server.aof_buf 缓冲区;
    2. 第一次系统调用是 write() 写到操作系统的文件缓存 pageCache
    3. 第二次系统调用是 fsync() 将 pageCache 的文件缓存正式写到硬盘

Redis 提供了 3 种写回硬盘的策略,控制的就是上面说的第三步的过程。

    • Always 策略就是每次 write() 写入 AOF 文件数据到 pageCache 后,就立即执行 fsync() 函数;
    • Everysec 策略就会创建一个异步任务来执行 fsync() 函数;
    • No 策略就是永不执行 fsync() 函数,由操作系统自己来控制写回时机;

 

AOF重写机制

标签:AOF,持久,方式,Redis,命令,操作命令,日志,执行
From: https://www.cnblogs.com/suBlog/p/17401026.html

相关文章

  • 关于 UE4 TMap 的几种遍历方式
    测试数据1TMap<int32,FString>Map1;2TMap<int32,FString>Map2;34Map1.Add(1,TEXT("AAA"));56ShowMap_1(Map1,1);7ShowMap_2(Map1,1);8ShowMap_3(Map1,1);  1. 通过Key直接查找Map1//通过Key直接查......
  • 关于 UE4 TMap 的几种遍历方式
    测试数据1TMap<int32,FString>Map1;2TMap<int32,FString>Map2;34Map1.Add(1,TEXT("AAA"));56ShowMap_1(Map1,1);7ShowMap_2(Map1,1);8ShowMap_3(Map1,1);  1. 通过Key直接查找Map1//通过Key直接查......
  • Redis数据结构一之对象的介绍及各版本对应实现
    本文首发于公众号:Hunter后端原文链接:Redis数据结构一之对象的介绍及各版本对应实现本篇笔记开始介绍Redis数据结构的底层实现。当我们被问到Redis中有什么数据结构,或者说数据类型,我们可能会说有字符串、列表、哈希、集合、有序集合。其实这几种数据类型在Redis中都由......
  • idea常见debug方式
    行断点方法断点方法断点,在方法上加一个断点,在进入方法的时候默认会在首行代码加一个断点并进入,在方法开始和方法结束的时候都会进行一个停顿,好处是方便观看结果的返回值。详细断点异常断点字段断点......
  • redis 事务
    1.事务概述:1.1什么是事务:指可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序的串行化执行而不会被其他命令插入,不许加塞。即:一个队列中,一次性、顺序性、排他性的执行一系列命令。1.2与传统关系型数据库的事务相比redis事务的不同之处:我......
  • 04-面试必会-Redis篇
    01-你们项目中哪里用到了Redis?在我们的项目中很多地方都用到了Redis,Redis在我们的项目中主要有三个作用:使用Redis做热点数据缓存/接口数据缓存使用Redis存储一些业务数据,例如:验证码,用户信息,用户行为数据,数据计算结果,排行榜数据等使用Redis......
  • vector传递内存参数的三种方式
    vector作为参数的三种传参方式c++中常用的vector容器作为参数时,有三种传参方式,分别如下(为说明问题,用二维vector):function1(std::vector<std::vector<int>>vec),传值function2(std::vector<std::vector<int>>&vec),传引用function3(std::vector<std::vector<int>>*ve......
  • MATLAB代码:全面ADMM算法代码,实现了三种ADMM迭代方式
    MATLAB代码:全面ADMM算法代码,实现了三种ADMM迭代方式关键词:综合能源分布式协同优化交替方向乘子法最优潮流参考文档:《基于串行和并行ADMM算法的电_气能量流分布式协同优化_瞿小斌》仿真平台:MATLAB主要内容:本代码是较为全面的ADMM算法代码,实现了三种ADMM迭代方式,分别是:1、普通常......
  • Linux的桌面快捷方式
    DesktopEntry文件是Linux桌面系统中用于描述程序启动配置信息的文件,它以.desktop为后缀名,相当于微软Windows系统下的桌面快捷方式。通常一个二进制可执行程序是一个没有后缀没有图标的文件,不可以随意移动。如果没有desktop文件,用户每次都需要打开一层层文件夹最后找到这......
  • 该程序为MATLAB的m文件,用于设计单相LCL并网逆变器控制器参数,控制方式为电容电流和入网
    该程序为MATLAB的m文件,用于设计单相LCL并网逆变器控制器参数,控制方式为电容电流和入网电流控制方式,只需输入LCL滤波参数和直流侧电压可计算出双闭环控制器参数ID:59200670277205562......