Redis的持久化(新)

        Redis中数据都保存在内存,但是内存中的数据变换很快,也很容易丢失,比如连接断开、宕机停机等等。而Redis提供的数据持久化机制有RDB(Redis DataBase)AOF(Append Only File)

1.RDB

        RDB是指在指定的时间间隔内将内存中的数据集快照写入到磁盘中,也是默认的持久化的方式,利用数据快照,使用的是写时复制技术,将数据以二进制的格式保存在磁盘。

1.1触发快照的时机(save)

1.1.1手动触发

手动触发分别对应save和bgsave命令:

  • save命令:阻塞当前Redis服务,去做持久化操作,直到RDB持久化过程完成为止,不推荐使用。

  • bgsave命令:redis进程执行fork操作创建子进程,子进程负责RDB持久化,完成后子进程自动结束,而且原进程的阻塞只发生在fork阶段。

1.1.2自动触发

        利用save进行相关配置,我们进入到redis.conf文件中,其中Save m n就表示若在m秒里面至少进行了n次数据更改时会自动执行bgsave

        我们将需要持久化的数据写入磁盘中保存,磁盘中的文件名为dump.rdb,和bin在同一个目录,redis启动时,就是读取dump.rdb文件将数据加载进内存中的。文件的名字可在redis.conf文件里面进行修改。

 注意

  1. 如果只开启了rdb,通过shutdown save命令断开Redis的连接时,也会自动执行bgsave。

  2. 在调试级别(debug)中重新启动Redis时,不会清空内存中的数据,这意味着原有的RDB文件仍然有效,即使未执行保存操作。

  3. 当Redis执行全量复制(主从复制)时,如果没有执行save或bgsave命令并且没有添加配置策略,主节点会自动生成RDB文件,并传输给从节点进行数据同步。

1.2RDB持久化和数据恢复的完整流程(bgsave)

        当需要进行持久化时,Redis会单独创建一个子进程来完成持久化操作,这个子进程中所有的数据都和原进程保持一致,而且是一个全新的进程,也会占用内存,这个操作也称为Fork

        此时原进程不进行任何操作,由其子进程完成数据的持久化,子进程会先将快照数据写入到一个临时的文件,等到数据写完了之后,再用这个临时的文件直接替换磁盘上的dump.rdb文件即可。

        但是缺点是如果子进程正在将数据写入临时文件,此时突然宕机,无法将临时文件替换dump.rdb,下次启动后,恢复后的内存数据较与宕机之前相比就会丢失一部分。

        发现整个过程中,原进程是不进行任何IO操作的,这就确保了极高的性能。

1.3RDB方式的优劣分析

1.3.1优点
  • 恢复数据速度快。

  • 节省磁盘空间(二进制格式存储)。

1.3.2缺点
  • fork的时候,会占用内存空间。

  • 可能会丢失数据,不适用于数据一致性高的场景。

2.AOF

日志的形式来记录每个更改的操作,不会记录读的操作,只允许追加而不允许改写。在redis重启或启动之初会读取该文件然后重新构建Redis数据库的数据,这样也不用害怕内存数据的丢失了。

AOF方式Redis默认是不开启的,如果要开启则需要在配置文件中修改,若AOF和RDB同时开启,系统默认选择用AOF来恢复数据,AOF在磁盘中保存的日志文件是"appendonly.aof",文件的路径和RDB一致。

2.1AOF同步频率策略

  • appendsync always :表示每次的修改都会立刻记入磁盘日志文件,性能较差但是能保证数据的一致性。

  • appendsync everysec (默认) :每一秒执行一次数据同步,但可能会在临界点丢失数据。

  • appendfsync no:redis不主动进行同步,把同步时机交给操作系统。

2.2Rewrite压缩

因为AOF采用的是追加写入的方式,为了避免磁盘AOF文件越来越大,新增了重写机制,当文件默认达到128MB时,Redis就会自动进行AOF文件的内容压缩,保留能达到最终结果的最小指令集。

2.2.1重写的整体流程梳理(自动的)
  1. 主进程fork一个子进程去执行重写的操作,主进程正常运行不会阻塞。

  2. 主进程执行的写操作要同时写入AOF缓冲区和AOF_rewrite缓冲区,此时子进程遍历内存数据将自己压缩的指令集先存储到临时文件(新AOF文件),之后向主进程发送信号。

    注意:这里AOF缓冲区是否要根据同步策略将数据同步到磁盘AOF文件中?

    可以进行设置。如果同步,那么数据安全一致性,但是性能会比较低。如果不同步,若此时宕机,会造成数据丢失,但是性能比较高。

  3. 主进程把AOF_rewrite缓冲区中的数据写入到临时文件中。

  4. 使用临时文件(新AOF文件)覆盖旧的AOF文件,完成AOF重写。

2.3AOF持久化和数据恢复的完整流程

  1. 写操作命令先会被追加写入到AOF缓冲区内。

  2. AOF缓冲区根据同步频率策略将缓冲区数据同步到磁盘AOF文件中。

  3. 看磁盘AOF文件大小是否超过阈值,判断要不要rewrite重写。

  4. 如果Redis宕机,重启服务时,会加载AOF文件来进行数据恢复。

2.4AOF文件出现损坏

        如遇到AOF文件损坏,通过.........../bin/redis-check-aof--fix appendonly.aof进行恢复。恢复后重启Redis服务即可。

2.5AOF方式的优劣分析

2.4.1优点
  • 备份机制更加的稳健,丢失数据概率更低。

  • 可读的日志文件。

2.4.2缺点
  • 相比RDB占用更多的磁盘空间。

  • 恢复数据相比RDB更慢。

  • 如果每次写操作都同步,对性能要求较高。

  • AOF文件可能出现损坏,需要手动修复。

                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/207311.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多普勒流速流量计的功能作用

在当今的城市管理中,排水系统的监控和管理一直是难题之一。传统的人工巡检方式不仅效率低下,而且无法做到实时监控和预警。然而,随着科技的进步,多普勒流速流量计的出现为城市排水管理带来了新的解决方案。 多普勒流速流量计是一种…

UI自动化之Playwright简介

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

UI设计师岗位的基本职责八篇(合集)

UI设计师岗位的基本职责1 职责: 1. 负责公司互联网产品app、web、h5等的用户界面设计工作; 2. 负责运营活动相关的平面及视频设计支持; 3. 负责完成产品相关的界面、图标、动画等的图形界面设计,并参与制定、编写产品视觉设计规范文档; 4. 整理和分…

解决 VSCode 配置远程连接,过程试图写入的管道不存在

解决 VSCode 配置远程连接,过程试图写入的管道不存在

蓝桥杯每日一题2023.11.22

题目描述 题目分析 由题目知其每个品牌积分一定小于315故直接暴力枚举每个品牌如果符合要求直接输出即可 &#xff08;答案&#xff1a;150&#xff09; #include<bits/stdc.h> using namespace std; int main() {for(int i 1; i < 315; i ){for(int j 1; j <…

Vue 定义只读数据 readonly

readonly 让一个响应式数据变为 **深层次的只读数据**。 isReadonly 判断一个数据是不是只读数据。 应用场景&#xff1a;不希望数据被修改时使用。 readonly 深层次只读&#xff1a; <template><h1>reactive数据</h1><p>姓名&#xff1a;{{ info…

redis运维(十二) 位图

一 位图 ① 概念 1、说明&#xff1a;位图还是在操作字符串2、位图玩字符串在内存中存储的二进制3、ASCII字符通过映射转化为二进制4、操作的是字符串value ② ASCII字符铺垫 1、控制ASCII字符 2、ASCII可显示字符 ③ SETBIT 细节&#xff1a; setbit 命令的返回值是之…

d3dx9_43.dll缺失怎么办?教你一分钟修复d3dx9_43.dll丢失问题

今天&#xff0c;与大家分享关于“d3dx9_43.dll丢失的5个解决方法”的主题。在我们的日常生活和工作中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;而d3dx9_43.dll丢失就是其中之一。那么&#xff0c;什么是d3dx9_43.dll呢&#xff1f;它为什么会丢失&#xff1f;又该…

18.天气小案例

1►新增带Layout组件的页面 直接在views文件夹下面新增weather.vue。然后随便写一个123&#xff0c;现在先让我们页面能跳过去先。 让页面能跳过去&#xff0c;有好几种方法&#xff1a; 1、在菜单管理自己添加一个菜单&#xff0c;然后把菜单分配给某个角色&#xff0c;再把…

【iOS】实现评论区展开效果

文章目录 前言实现行高自适应实现评论展开效果解决cell中的buttom的复用问题 前言 在知乎日报的评论区中&#xff0c;用到了Masonry行高自适应来实现评论的展开&#xff0c;这里设计许多控件的约束问题&#xff0c;当时困扰了笔者许久&#xff0c;特此撰写博客记录 实现行高自…

SQL语句执行过程

一条 SQL 的执行过程可以大致分为以下几个步骤&#xff1a; 连接器&#xff1a; ○ 客户端与数据库建立连接&#xff0c;并发送 SQL 语句给数据库服务。 ○ 连接器验证客户端的身份和权限&#xff0c;确保用户有足够的权限执行该 SQL 语句。查询缓存&#xff1a; ○ 连接器首先…

谷歌开发者账号登录提示“存在异常活动”的原因及解决方法

相信很多开发者在登录谷歌开发者账号时遇到过这样的情况&#xff1a;“Verify your identity” “Weve detected unusual activity on the accountyoure trying to access. To continue, please followthe instructions below.” “验证您的身份&#xff0c;我们已经检测到你…