Redis持久化——追加与快照

news/2024/10/29 2:31:57/

持久化意味着写入数据到持久化储存。redis有两个持久化手段

  • RDB(Redis Database): 以指定的时间间隔执行数据的时间点快照。
  • AOF(Append Only File): 持久化每个server收到的写入操作到log。

AOF执行过程

  1. 命令传播: Redis将执行完的命令等信息发送给AOF程序中

  2. 缓存追加: AOF程序转化接收到的命令数据为网络通讯协议格式,然后追加到AOF缓存

  3. 文件写入与保存: 将AOF缓存追加到AOF文件末尾,在满足保存条件的情况下,保存到磁盘中

保存模式:

  • AOF_FSYNC_NO: 不保存。不保存并不是真的不保存,而是不主动保存。在redis关闭、AOF功能关闭或者系统刷新。比如Linux一般会每30s刷新

    通常由主线程执行写入和保存,会堵塞进程

  • AOF_FSYNC_EVERYSEC: 每一秒保存

    主线程写入,堵塞主线程。子线程保存

  • AOF_FSYNC_ALWAYS: 每次新命令追加都保存

    主线程写入,堵塞主线程。子线程保存

值得注意的是每一秒保存模式并不是真的每一秒保存。

  • 若子线程正在执行SAVE
    • 执行未超过2s,那么程序直接返回
    • 执行超过2s,程序执行写入,但不执行保存
  • 若子线程没有执行SAVE
    • 距上次保存不超过1s,写入
    • 距上次保存超过1s,写入并执行

也就是说在子线程正在执行保存且超过2s的情况下,是存在损失2s以上数据可能性的

数据还原

aof还原数据是创建一个不带网络连接的伪客户端,随后读取aof文件,还原命令并执行

重写

为了防止aof文件越来越大,redis会对aof文件进行重写。

比如对于以下先设置k为hello,随后设置为world,那么重写就会合并这两条命令为设置k为world

set k hello
set k world

进一步,为了不影响主线程,redis将重写交给了后台线程处理。并提供了重写缓存缓存在重写期间执行的操作

RDB执行过程

rdb就是将在内存中的数据快照保存到磁盘。

总结

如果希望更快地恢复数据,希望最大化Redis性能,那么RDB更佳。

如果希望更高的安全性,那么AOF更适合

当然也可以全都要

Ref

  1. https://redis.io/docs/management/persistence/
  2. https://redisbook.readthedocs.io/en/latest/internal/aof.html
  3. https://redisbook.readthedocs.io/en/latest/internal/rdb.html

http://www.ppmy.cn/news/37452.html

相关文章

出售Steam上线游戏的完整开发资源包

我开发了一款Steam上的小游戏: 《述途路人团乐之国》(英文名称:《As Talk As Walk Wayfarer Team - Land of Music》) https://store.steampowered.com/app/2332050/_/ 发行日期:2023年3月13日。 发行平台:…

尚硅谷大数据技术Hadoop教程-笔记07【Hadoop-源码解析】

视频地址:尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优) 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】尚硅谷大数据技术Ha…

HR都想招到的优秀00后程序员,都有这些特点...

拉勾招聘发布的《2022程序员群体职场洞察报告》显示,74%的00后程序员的薪酬已经过万,这一数据比应届生平均起薪高出50%,一些大厂(SP/SSPSpeicial Offer)所提供的薪酬则更加可观。 上图节选自拉勾招聘《2022程序员群体…

【Vue3源码Runtime-core篇】 第一章 初识Runtime

第一章 初识Runtime 前言 当设计一个框架的时候,我们有三种选择:纯运行时的、运行时 编译时的或纯编译时的。 我们先聊聊纯运行时的框架。 假设我们设计了一个框架,它提供 一个 Render 函数,用户可以为该函数提供一个树型结构的…

33、搜索旋转排序数组

难度&#xff1a;中等 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], n…

RocketMQ中核心概念及术语介绍

文章目录 角色ProducerConsumerPushConsumerPullConsumer概念术语Producer GroupConsumer GroupTopicTagMessage QueueOffsetConsumer Offset集群消费广播消费顺序消息普通顺序消息严格顺序消息RocketMQ中有很多独有的概念,其中包括一些术语和角色。 理清楚基本的概念是理解原…

前端重装系统需要安装什么

目录 1.安装nvm 2.安装git 3.安装yarn 4. 安装cnpm 5. 配置hbuilder 6. 配置vscode 1.安装nvm 1.1 下载 下载地址&#xff1a;Releases coreybutler/nvm-windows GitHub 如果下载慢&#xff0c;可以复制链接到迅雷下载 1.2 安装 在c盘下创建一个nvm文件夹并创建一个…

【蓝桥杯集训·每日一题】 AcWing 3996. 涂色

文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴区间DPUnique函数一、题目 1、原题链接 3996. 涂色 2、题目描述 有 n 个砖块排成一排&#xff0c;从左到右编号为 1∼n。 其中&#xff0c;第 i 个砖块的初始颜色为 ci。 …