redis持久化-rdb

redis持久化-rdb策略

  • redis持久化
  • rdb策略
    • 触发时机
      • 自动触发
      • 手动触发
        • bgsave

redis持久化

🚀我们知道redis是将数据存储在内存当中的,通常使用来作为关系型数据库的缓存使用的,以缓解当大量请求到来时关系型数据库的压力。
🚀既然数据是存储在内存中的,那么就意味着redis服务重启,redis所在机器重启就会导致数据丢失,所以redis中的数据也是需要持久化的。
🚀这篇文章主要介绍redis持久化方式的一种rdb,(redis database的缩写)。

rdb策略

🚀rdb这种方式会定期的将redis中的数据,写入到磁盘中,生成一个快照,默认为dump.rdb的文件,可以在 /etc/redis/redis.conf 配置文件中修改 dir选项进行配置。
在这里插入图片描述

触发时机

🚀rdb触发的方式有两种。

  • 第一种是redis自动的,当满足多长时间内修改了多少次的条件后会自动触发一次rdb。
  • 第二种是手动触发,用户通过redis客户端,使用save或者bgsave命令触发rdb。

自动触发

🚀在redis的配置文件中可以配置自动触发的条件,通常redis的配置文件的路径为:/etc/redis/redis.conf,其中的save选项就是rdb自动触发需要满足的条件。
在这里插入图片描述

save选项的格式为,save 多少秒内 多少次修改,只有两个条件都满足才会触发,也就是说只有在这么多秒内产生了这么多次修改才会自动触发一次rdb。
如果你想关闭自动触发rdb的功能,可以将save选项配置为 save “”。

🚀除此之外,当使用shutdown命令关闭redis服务的时候,也会自动触发rdb。
执行shutdown命令前:
在这里插入图片描述
执行shutdown命令后:
在这里插入图片描述
在这里插入图片描述
可以看到dump.rdb文件的时间已经改变,说明生成了新的rdb文件。
在这里插入图片描述
虽然这是一个二进制文件,但是我们可以看到刚刚存储进去的key1和key2。
🚀在主从复制的时候,主节点会自动生成rdb快照,然后把rdb快照文件传输给从节点。
🚀flushall会清空dump.rdb快照文件。
在这里插入图片描述
在这里插入图片描述
可以看出,刚才的key1和key2都已经不存在了。

手动触发

🚀在redis客户端中输入save指令,此时redis服务器会全力以赴的生成快照文件,因为redis服务器采用单线程的工作方式,全力以赴的生成快照文件就意味着阻塞了其他客户端的请求,所以通常使用save手动触发rdb的方式不是一种好的选择。
🚀通常手动触发rdb,都是采用bgsave的方式,(bg-background 后台的意思),使用bgsave触发rdb的时候,redis服务器并不会亲自的去生成rdb快照文件,而是启动了一个子进程去生成这个rdb快照文件。

bgsave

🚀bgsave实现持久化时的步骤:

  • 判定是否已经有子进程在做持久化的工作,确保只有一个子进程进行持久化的工作。
  • 如果没有子进程,那么就fork一个子进程。
  • 子进程负责持久化生成rdb文件,父进程继续负责响应客户端请求。
  • 子进程完成工作后通过信号通知父进程。

🚀rdb文件是一个二进制文件,是将内存中的数据以压缩的形式存储到了这个二进制文件中的。并且redis提供了检验rdb文件格式的工具—redis-check-rdb。
在这里插入图片描述
需要注意的是,老版本的redis生成的rdb文件,在新版本的redis中可能识别不了。
🚀bgsave生成dump.rdb文件是先生成一个临时的文件,然后将老的rdb文件删除,将临时文件改为rdb文件。使用save的时候,是redis服务器进程直接向dump.rdb文件中写入,不涉及文件的替换。
🚀可以看出生成rdb文件的成本是比较高的,所以rdb文件生成的不能太频繁,这也就导致了rdb快照中的数据与实际内存中的数据相比是存在偏差的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[LeetCode][226]翻转二叉树

题目 226. 翻转二叉树 给你一棵二叉树的根节点 root,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root [2,1,3] 输出&#x…

025—pandas 根多列判断不在其他列的数据

思路 是有两个相同结构的数据表,已知第二个表是第一个表的部分数据,需要以其中两列为单位,判断在第一个表中存在,在另外一个表中不存在的数据。 思路: 我们先将 df1 和 df2 的 x、y 列取出,组合为元组形成…

013 Linux_互斥

前言 本文将会向你介绍互斥的概念,如何加锁与解锁,互斥锁的底层原理是什么 线程ID及其地址空间布局 每个线程拥有独立的线程上下文:一个唯一的整数线程ID, 独立的栈和栈指针,程序计数器,通用的寄存器和条件码。 和其…

【Python】成功解决IndexError: list index out of range

【Python】成功解决IndexError: list index out of range 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订…

整除光棍(pta团体天梯练习题)模拟手算除法c++

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定…

朴素贝叶斯 | 多分类问题

目录 一. 贝叶斯公式的推导二. 朴素贝叶斯1. 离散的朴素贝叶斯朴素贝叶斯导入示例 离散的朴素贝叶斯训练 2. 连续的朴素贝叶斯3. 伯努利朴素贝叶斯4. 多项式朴素贝叶斯4.1 Laplace平滑4.2 Lidstone平滑 三. 概率图模型1. 贝叶斯网络(Bayesian Network)1.1 全连接贝叶斯网络1.2 …

【Redis知识点总结】(二)——Redis高性能IO模型剖析

Redis知识点总结(二)——Redis高性能IO模型及其事件驱动框架剖析 IO多路复用传统的阻塞式IO同步非阻塞IOIO多路复用机制 Redis的IO模型Redis的事件驱动框架 IO多路复用 Redis的高性能的秘密,在于它底层使用了IO多路复用这种高性能的网络IO&a…

[java入门到精通] 18 字符流,编码表,对象流,其他流

今日目标 编码表 字符输出流 字符输入流 字符缓冲流 转换流 对象操作流 装饰模式 commons-iojar包 1 编码表 1.1 思考: 既然字节流可以操作所有文件,那么为什么还要学习字符流 ? 如果使用字节流 , 把文本文件中的内容读取到内存时…

ODP(Open Data Plane)

1. 摘要 本文档旨在指导新的ODP应用程序开发人员。 有关ODP的更多详细信息,请参见 ODP 主页。 Overview of a system running ODP applications ODP是一份API规范,为高性能网络应用程序的实现提供平台独立性、自动硬件加速和CPU扩展。 本文档介绍如何充…

DHCP中继实验(思科)

华为设备参考:DHCP中继实验(华为) 一,技术简介 DHCP中继,可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的IP…

OS-Copilot:实现具有自我完善能力的通用计算机智能体

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ AI 缩小了人类间的知识和技术差距 论文标题:OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 论文链接:https://arxiv.org/abs/2402.07456 项目主页&a…

Hadoop生态选择(一)

一、项目框架 1.1技术选型 技术选型主要考虑因素:维护成本、总成本预算、数据量大小、业务需求、行业内经验、技术成熟度。 数据采集传输:Flume,Kafka,DataX,Maxwell,Sqoop,Logstash数据存储:MySQL,HDFS…

全网最最最详细的centos7如何设置静态ip

以下步骤假设你已经有了管理员权限(或者可以使用sudo)以及你的网络接口名称(例如ens33)。 步骤 1: 查找网络接口名称 打开终端。运行命令nmcli d来查看所有网络设备及其状态。找到你想配置的设备名称,比如ens33。 步…

结构指针的使用

结构指针的使用 指针类型变量: 指针类型,是变量类型的一种,它是专门用来存储变量的地址的。 例如 int *p; 表示p是一个指针变量,它用来存储某个整型变量的地址。 int a5; int *p&a; 这样,就将整型变量a的地…

Python语言元素之变量

程序是指令的集合,写程序就是用指令控制计算机做我们想让它做的事情。那么,为什么要用Python语言来写程序呢?因为Python语言简单优雅,相比C、C、Java这样的编程语言,Python对初学者更加友好。 一、一些计算机常识 在…

YOLOv9最新的改进项目来了!!

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! YOLOv9作为最新的YOLO系列模型,对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型,使用当前流…

RabbitMQ - 06 - Topic交换机

目录 控制台创建队列与交换机 编写消费者方法 编写生产者测试方法 结果 Topic交换机与Direct交换机基本一致 可参考 这篇帖子 http://t.csdnimg.cn/AuvoK topic交换机与Direct交换机的区别是 Topic交换机接收的消息RoutingKey必须是多个单词,以 . 分割 Topic交…

虚拟化

什么是虚拟化 虚拟化(Virtualization)是一种资源分配和管理技术,是将计算机的各种实体资源,比如CPU、内存、磁盘空间、网络适配器等,进行抽象转换后虚拟的设备,可以实现灵活地分割、组合为一个或多个计算机配置环境,并…

初探深度学习-手写字体识别

前言 手写数字的神经网络识别通常指的是通过训练有素的神经网络模型来识别和分类手写数字图像的任务。这种类型的任务是机器学习和计算机视觉领域的一个经典问题,经常作为入门级的图像识别问题来展示和测试各种机器学习算法的能力。在实际应用中,手写数…

寒假作业Day 09

寒假作业Day 09 一、选择题 因为一开始的for循环&#xff0c;k<2NN&#xff0c;所以复杂度为2N方&#xff0c;而后面的M10的while循环&#xff0c;则是10&#xff0c;复杂度为常数级&#xff0c;所以2N方10&#xff0c;近似于N方&#xff0c;即O(N^2) 这是一个计算阶乘的递…