redis持久化操作【随记】

持久化

Redis它是将数据保存到内存当中,内存里的数据最大特点: 断电易失.保存在内存的数据就没有了.如果如果这些数据还有用,业务使用啥的,不能就让它这么没有了.

redis当中提供持久化机制, 说白了,将内存的数据 —-> 写入到磁盘. –> 持久化.

1 rdb方式

redis database, 持久化机制.

相当在内存做了一快照.

################################ SNAPSHOTTING  ################################364 365 # Save the DB to disk.366 #367 # save <seconds> <changes>368 #369 # Redis will save the DB if both the given number of seconds and the given370 # number of write operations against the DB occurred.371 #372 # Snapshotting can be completely disabled with a single empty string argument373 # as in following example:374 #375 # save ""376 #377 # Unless specified otherwise, by default Redis will save the DB:378 #   * After 3600 seconds (an hour) if at least 1 key changed379 #   * After 300 seconds (5 minutes) if at least 100 keys changed380 #   * After 60 seconds if at least 10000 keys changed381 #382 # You can set these explicitly by uncommenting the three following lines.383 #384  save 3600 1385  save 300 100386  save 60 10000

配置一下文件名称: dbfilename 6379.rdb –> 建议修改成6379, 因为之后会启动多台服务器

配置一下持久化的文件目录: dir ./ –> 可以修改成你自己喜欢的目录

1.2 触发rdb持久化的条件有哪些?

  1. 满足咱们配置的持久化条件

    ==当满足触发rdb的条件的时候,默认会使用: bgsave的姿势进行持久化.==

     384  save 3600 1385  save 300 100386  save 60 10000
  2. 执行bgsave也会触发持久化

    不会阻塞当前的线程, 当前的其它客户端咱们redis依然能处理.

  1. 正常关机

通过shutdown, 执行正常关闭Redis服务, 也会触发Redis操作.这里使用的是: save的方式.

  1. 执行save也会发生持久化

执行的时候,是阻塞式,也就是说我在落盘的时候,会阻塞当前的redis线程.其它的客户在我持久化过程当中,是不能使用reids的.

如果我执行: save之后, 持久化时间花30秒,在这30秒之内,reids是无法处理其它客户端请求的. –> 阻塞式.

  1. 执行flushdb也会触发

总结一下:

  • bgsave

    • copy on write

    • fork(), 创建子进程

    • 这两东西都是内核提供提供的机制.

  • 配置的save当满足条件了,执行的也是bgsave持久化方式.

redis正常启动的时候,会从默认的 rdb目录加载6379.rdb文件, 将数据恢复到内存当中.

恢复的速度,非常的快,因为rdb是二进制存储的.

rdb持久化操作的缺点:

  • 无法保证数据安全

    • 没有办示确保内存数据会一定落盘到磁盘.它可能会丢失一个时间段之内的所有数据.

  • 它不支持拉链存储

    • 最终存储数据只有一个6379.rdb文件,之前被覆盖,之后的行为会覆盖掉当前的数据.

    • 如果想要某个时间段的,只有手动备份.

2 aof

append only file.采用记录日志的姿势来存储数据.日志写在文件当中,这样丢失少一些,同样,存储的是文本, 恢复速度慢.

需要我们进行配置的:

  • appendonly no –> appendonly yes, 表示开启aof

  • appendfilename "6379.aof", 保存到磁盘上的文件名称.

aof持久化策略配置:

  • 将内存的数据写入到aof文件的时机.

    • no, 表示由操作系统决定啥时候写入.

    • always, 表示如果有key发生更改,就写入.

    • everysec, 表示一秒钟写入一次.

1269 # no: don't fsync, just let the OS flush the data when it wants. Faster.
1270 # always: fsync after every write to the append only log. Slow, Safest.
1271 # everysec: fsync only one time every second. Compromise.
​
1286 # appendfsync always
1287 appendfsync everysec
1288 # appendfsync no

默认的aof文件的保存位置,是在配置文件当中的dir目录配置的.

我们这里配置的是: dir '/usr/local/yyds2305/redis-6.2.13/redis-rdb-aof/' 目录.

*2
$6
SELECT
$1
0
*3
$3
SET
$3
age
$2
26
​
# aof文件内容,是上边的样子.

2.1 重写机制

bgrewriteaof, 会合并记录的日志6379.aof文件当中,合并重复的命令,合并相互抵消的命令.

  • 对这个日志何种进行减少.

  • aof恢复记录的方式, 是将日志文件,一条接一条执行一遍. 如果日志条数太多了,则恢复速度肯定会被拖慢.

1328 auto-aof-rewrite-percentage 100 # 1倍的大小,再次触发bgrewriteaof
1329 auto-aof-rewrite-min-size 64mb # aof文件的默认大小,到达了64MB, 触发bgrewriteaof. 重写机制

对于aof持久化的总结:

  1. 基于文本文件的持久化机制.「命令都存储了文件当中.」

  2. 重写机制

    1. 4.x之后redis才有的.

    2. bgrewriteaof, 它会将6379.aof文件当中的重复命令,可以相互抵消的命令合并.

      1. 6379.aof文件的体积会减小

      2. 使用6379.aof文件恢复数据的时候,命令数减少了,这样的恢复速度也快一些.「依然要比恢复rdb文件慢.」

      3. 重写触发条件: 配置项

        auto-aof-rewrite-percentage 100
        auto-aof-rewrite-min-size 64mb
  1. 配置项

  2. 从内存 —> 内核缓冲区 –> 磁盘文件

    1. 它并不是每一秒都将文件写到磁盘上.这样的话,磁盘I/O太高.

    2. 从内核缓冲区 –> 磁盘文件

2.2 rdb + aof 混合体

rdb: 基于二进制的,恢复速度快,但是丢失数据比较多.

aof: 基于文件存储,恢复速度慢, 但是丢失数据比较少.

能不能, 让两者结合下,既要rdb快,也要aof丢失数据量,还要文件何种减少.

开启混合体的配置项:

  • 开启aof

  • 开启rdb

  • 开启混全开关

# When loading, Redis recognizes that the AOF file starts with the "REDIS"
# string and loads the prefixed RDB file, then continues loading the AOF
# tail.
aof-use-rdb-preamble no --> yes, 这个就表示开启混合模式. 默认就是开启的.

基本流程:

  • 同时开启rdb + aof , 在配置文件当中进行配置.

  • 开启配置项: aof-use-rdb-preamble yes


生成的文件

  • 会同时生成rdb和aof文件.

  • rdb二进制的文件, aof文本文件.

  • 如果执行了: bgrewriteaof, 可以这么理解: 将rdb文件的内容覆盖掉aof文件.此时rdb文件和aof文件,文件大小一样,保存的内容也是一样的,同时此时的aof文件也保存的是二进制的内容.

  • 在这之后,如果再次发了写操作,此时,命令会以日志的文件追加到aof文件,此时aof文件是一个rdb内容 + aof 的混合体.


从硬盘恢复数据:

  • 如果开启了混合模式,则恢复的时候,只恢复aof文件.

如果命令当中执行了: flushdb/flushall,此时咱们可以打开aof文件,将这个命令行删除掉, 然后重启redis服务.

数据不会丢失.也不会被删除.

如果执行完bgrewriteaof之后,此时aof文件,会变成二进制文件.此时就没有办法了.

 

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

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

相关文章

车载测试系列:CAN协议之远程帧

远程帧&#xff08;也叫遥控帧&#xff09;&#xff1a;是接收单元向发送单元请求发送具有标识符的数据所用的帧&#xff0c;由 6 个段组成&#xff0c;没有数据段。 当某个节点需要数据时&#xff0c;可以发送远程帧请求另一节点发送相应数据帧。 简单的说&#xff1a;发起方…

示例:推荐一个基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器

一、目的&#xff1a;基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid&#xff0c;可以像Excel拥有列头筛选器&#xff0c;感兴趣的可以去下方链接地址查看开源控件库地址。本控件封装的目的在于将第三方库的皮肤和样式封装到皮肤库中可统一设置样式&#xff0c…

[数据概念]一分钟弄懂数据治理

“ 数据治理是数据资产化的起点。” 数据资产化的趋势正愈演愈烈。然而&#xff0c;我们必须清醒地认识到&#xff0c;资产化的前提条件是拥有实际的数据资产。那么&#xff0c;这些宝贵的数据资产究竟源自何处呢&#xff1f;答案显而易见&#xff0c;它们源自企业日常运营中积…

任务5.2 掌握DStream基础操作

实战&#xff1a;DStream基础操作 了解DStream编程模型&#xff1a;DStream是Spark Streaming中对实时数据流的抽象&#xff0c;可以看作一系列持续的RDD。DStream可以通过外部数据源获取或通过现有DStream的高级操作获得。 操作本质&#xff1a;DStream上的操作最终会转化为对…

kettle从入门到精通 第七十三课 ETL之kettle kettle调用http分页接口教程

场景&#xff1a;kettle调用http接口获取数据&#xff08;由于数据量比较大&#xff0c;鉴于网络和性能考虑&#xff0c;所以接口是个分页接口&#xff09;。 方案&#xff1a;构造页码list&#xff0c;然后循环调用接口。 1、总体设计 1&#xff09;、初始化分页参数pageNum1…

[MYSQL] 数据库基础

1.什么是数据库 从数据库的名字可以看出,它是用来操作(增删查改....)数据的,事实上也的确如此,通过数据库,我们可以更方便.更高效的来操作.管理数据 以文件形式存储数据的缺点 文件的安全问题文件不利于数据的查询和删除文件不利于存储海量数据操作文件并不方便 为了解决上述问…

Day 31:100334. 包含所有1的最小矩形面积Ⅰ

Leetcode 100334. 包含所有1的最小矩形面积Ⅰ 给你一个二维 **二进制 **数组 grid。请你找出一个边在水平方向和竖直方向上、面积 最小 的矩形&#xff0c;并且满足 grid 中所有的 1 都在矩形的内部。 返回这个矩形可能的 **最小 **面积。 确定首次出现 1 的第一行 top&#xf…

Pip换源秘籍:让你的Python包飞行起来!

在Python的包管理中&#xff0c;Pip是最重要的工具之一。它允许开发者从Python Package Index (PyPI)安装包&#xff0c;但有时由于网络问题或服务器负载过高&#xff0c;直接从PyPI安装包可能会非常慢。这时&#xff0c;更换Pip源到一个更快的镜像站点是一个常见的解决方案。本…

基于SSM的校园闲置物品交易系统【附源码】

题目&#xff1a; 基于SSM的校园闲置物品交易系统 摘 要 伴随着电子商务的飞速发展&#xff0c;网上交易日益发挥出其不可替代的优越性。但由于电子商务在校园的应用起步较晚&#xff0c;以及校园电子商务模式应用的不成熟&#xff0c;使高校校园电子商务的发展缓慢。 二手商品…

基于S7-200PLC的全自动洗衣机控制系统设计

wx供重浩&#xff1a;创享日记 那边对话框发送&#xff1a;plc洗衣 获取完整无水印设计说明报告&#xff08;含程序梯形图&#xff09; 1.自动洗衣机PLC控制的控制要求 1.1全自动洗衣机的基本结构、工作流程和工作原理 1.自动洗衣机的基本结构 2.自动洗衣机的工作流程 自动洗…

MySQL锁详解

目录 前言 MySQL锁 共享锁和排他锁 - Shared and Exclusive Locks 意向锁 - Intention Locks 索引记录锁 - Record Locks 间隙锁 - Gap Locks 临键锁 - Next-Key Locks 插入意向锁 - Insert Intention Locks AUTO-INC Locks 死锁 死锁产生条件 InnoDB对死锁的检测…

海康威视-下载的录像视频浏览器播放问题

目录 1、播放异常比对 2、视频编码检查 2.1、正常视频解析 2.2、海康视频解析 2.3、比对工具 3、转码 3.1、maven依赖 3.2、实现代码 4、验证 在前面的文章&#xff08;海康威视-按时间下载录像文件_海康威视 sdk 下载录像 大小0-CSDN博客&#xff09;中&#xff0c;通…

计算机网络之奇偶校验码和CRC冗余校验码

今天我们来看看有关于计算机网络的知识——奇偶校验码和CRC冗余校验码&#xff0c;这两种检测编码的方式相信大家在计算机组成原理当中也有所耳闻&#xff0c;所以今天我就来跟大家分享有关他们的知识。 奇偶校验码 奇偶校验码是通过增加冗余位使得码字中1的个数恒为奇数或偶数…

汽车网络安全 -- 漏洞该如何管理

目录 1.漏洞获取途径汇总 2.CAVD的漏洞管理规则简析 2.1 通用术语简介 2.2 漏洞评分指标 2.3.1 场景参数 2.3.2 威胁参数 2.3.3 影响参数 2.3 漏洞等级判定 ​3.小结 在汽车网络安全的时代背景下&#xff0c;作为一直从事车控类ECU基础软件开发的软件dog&#xff0c;…

mysql启动时遇到:本地计算机上的MySQL服务启动后停止

1.问题重述&#xff1a; 今早启动数据库时发现无法启动&#xff0c;报错&#xff1a;本地计算机 上的 MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。 2.解决方案&#xff1a; 1.数据备份&#xff1a; 2.在bin目录下&#xff0c;命令行中输入 mysqld …

版本控制工具-git的基本使用

目录 前言一、git简介二、git工作流程三、git基本命令3.1 创建本地仓库3.2 将工作区内容提交到本地仓库3.3 将本地仓库内容推送到远程仓库 前言 本篇文章介绍git的一般工作流程 一、git简介 Git是一个开源的分布式版本控制软件&#xff0c;常用于项目的版本管理 Git是Linux …

196.每日一题:检测大写字母(力扣)

代码解决 class Solution { public:bool detectCapitalUse(string word) {int capitalCount 0;int n word.size();// 统计大写字母的数量for (char c : word) {if (isupper(c)) {capitalCount;}}// 检查是否满足三种情况之一if (capitalCount n) {// 全部字母都是大写return…

2024.06.23 刷题日记

〇、前言 今天重点刷了回溯&#xff0c;以及常见的题目。 46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3…

Node.js是什么(基础篇)

前言 Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台JavaScript运行时环境&#xff0c;主要用于开发服务器端应用程序。它的特点是非阻塞I/O模型&#xff0c;使其在处理高并发请求时表现出色。 一、Node JS到底是什么 1、Node JS是什么 Node.js不是一种独立的编程…

C/C++ - 编码规范(USNA版)

[IC210] Resources/C Programming Guide and Tips 所有提交的评分作业&#xff08;作业、项目、实验、考试&#xff09;都必须使用本风格指南。本指南的目的不是限制你的编程&#xff0c;而是为你的程序建立统一的风格格式。 * 这将有助于你调试和维护程序。 * 有助于他人&am…