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 given
 370 # number of write operations against the DB occurred.
 371 #
 372 # Snapshotting can be completely disabled with a single empty string argument
 373 # 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 changed
 379 #   * After 300 seconds (5 minutes) if at least 100 keys changed
 380 #   * After 60 seconds if at least 10000 keys changed
 381 #
 382 # You can set these explicitly by uncommenting the three following lines.
 383 #
 384  save 3600 1
 385  save 300 100
 386  save 60 10000

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

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

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

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

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

     384  save 3600 1
     385  save 300 100
     386  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文件,会变成二进制文件.此时就没有办法了.

 

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

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

相关文章

1.4 Kettle 数据同步工具详细教程

工具介绍 一、概述 Kettle&#xff0c;又名 Pentaho Data Integration&#xff08;PDI&#xff09;&#xff0c;是一个开源的数据集成工具&#xff0c;最初由 Pentaho 公司开发。它能够从多种数据源提取、转换并加载&#xff08;ETL&#xff09;数据&#xff0c;适用于数据仓…

STM32CubeMX 创建 MDK 工程

STM32CubeMX 创建 MDK 工程 MDK (Keil uVision) MDK (Keil uVision) 是 Arm 公司开发的一款集成开发环境 (IDE)&#xff0c;专门用于 Arm 架构的嵌入式系统开发。它提供了全面的功能&#xff0c;包括&#xff1a; 代码编辑器&#xff0c;支持语法高亮、代码补全和错误检测调试…

【YOLO 系列】基于YOLO V8的车载摄像头交通信号灯检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

前言 随着智能交通系统的发展&#xff0c;交通信号灯的准确识别对于提高道路安全和交通效率具有至关重要的作用。传统的交通信号灯识别方法依赖于固定的传感器和摄像头&#xff0c;存在安装成本高、维护困难等问题。为了解决这些问题&#xff0c;我们启动了这个项目&#xff0…

微软搁置水下数据中心项目——项目纳蒂克相比陆地服务器故障更少

“我的团队努力了&#xff0c;并且成功了&#xff0c;”COI负责人诺埃尔沃尔什说。 微软已悄然终止了始于2013年的水下数据中心&#xff08;UDC&#xff09;项目“纳蒂克”。该公司向DatacenterDynamics确认了这一消息&#xff0c;微软云运营与创新部门负责人诺埃尔沃尔什表示…

八大排序之希尔排序

一、概念及其介绍 希尔排序(Shell Sort)是插入排序的一种&#xff0c;它是针对直接插入排序算法的改进。 希尔排序又称缩小增量排序&#xff0c;因 DL.Shell 于 1959 年提出而得名。 它通过比较相距一定间隔的元素来进行&#xff0c;各趟比较所用的距离随着算法的进行而减小…

2024最新最全的车载测试教程__各模块测试用例

二、设计用例方法 1.测试用例设计前&#xff1a; a.仔细认真研读prd、理解prd b.质疑prd、有困惑或者想法的点做好记录&#xff0c;可以一次性和产品沟通 2.设计中&#xff1a; 成282 a.根据结构化思维&#xff0c;设计xmind i全链路正向功能点、子链路功能点 ⅱ.考虑业…

注意 llamaIndex 中 Chroma 的坑!

llamaIndex 做索引是默认存在内存中&#xff0c;由于索引需要通过网络调用 API&#xff0c;而且索引是比较耗时的操作&#xff0c;为了避免每次都进行索引&#xff0c;使用向量数据库进行 Embedding 存储以提高效率。首先将 Document 解析成 Node&#xff0c;索引时调用 Embedd…

指令调度基本概念

概述 为了提高处理器执行指令的并行度&#xff0c;处理器将计算机指令处理过程拆分为多个阶段&#xff0c;并通过多个硬件处理单元&#xff0c;将不同指令处理的前后阶段重叠并行执行&#xff0c;形成流水线(pipeline) 处理器的流水线结构是处理器微架构最基本的要素&#xf…

714. 买卖股票的最佳时机含手续费

714. 买卖股票的最佳时机含手续费 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;ExplanationSummary 参考代码&#xff1a;_714买卖股票的最佳时机含手续费 错误经验吸取 原题链接&#xff1a; 714. 买卖股票的最佳时机含手续费 https://leetcode.cn/probl…

“论微服务架构及其应用”写作框架,软考高级,系统架构设计师

论文真题 论微服务架构及其应用近年来&#xff0c;随着互联网行业的迅猛发展&#xff0c;公司或组织业务的不断扩张&#xff0c;需求的快速变化以及用户量的不断增加&#xff0c;传统的单块&#xff08;Monolithic&#xff09;软件架构面临着越来越多的挑战&#xff0c;已逐渐…

机器人阻抗控制相关文献学习(阻抗实现)

机器人阻抗是一个描述机器人与环境交互时动态特性的概念。 定义&#xff1a; 阻抗在机器人领域中&#xff0c;通常用来描述机器人与其环境之间的相互作用。当机器人与环境接触时&#xff0c;环境对机器人施加一个作用力&#xff0c;而机器人也会对环境施加一个反作用力。这个反…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-36图像增广

6 图片增广 import matplotlib.pyplot as plt import numpy as np import torch import torchvision from d2l import torch as d2l from torch import nn from PIL import Image import liliPytorch as lp from torch.utils.data import Dataset, DataLoaderplt.figure(cat)…

【记录】使用远程SSH配置d2l环境(含装pytorch,同时适用于本地anaconda)

文章目录 前言一、从创建新环境开始二、使用步骤1.安装pytorch2.安装 d2l 包3.安装其他包4.使用jupyter notebook 前言 记录一下如何利用使用命令行进行anaconda配置 d2l环境、pytorch并进行训练深度学习模型。 一、从创建新环境开始 如果是本地直接装一个 anaconda 软件就行…

【决战欧洲杯巅峰】AI模型预测[走地数据]初步准备工作

数据准备 首先&#xff0c;我们需要收集一些与欧洲杯比赛相关的历史数据。这些数据可能包括球队的历史战绩、球员的能力评分、比赛场地信息、历史交锋记录等。这些数据可以从公开来源获取&#xff0c;并进行适当的预处理和清洗。 特征提取 接下来&#xff0c;我们需要从收集…

基于JSP的“塞纳河畔左岸”的咖啡馆管理系统

开头语&#xff1a; 塞纳河畔左岸的咖啡&#xff0c;我手一杯品尝的你美~ 哎哟&#xff0c;不错哦&#xff01;我们今天来介绍一下咖啡馆管理系统&#xff01; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对咖啡馆管理系统感兴趣或有相关需求&#xff0c;欢迎联…

BLDC无感控制策略

本文根据 BLDC 的电路模型推导了一个简 化磁链方程来估计转子位置,转速适用范围较 广;重点分析了反电动势和换相电流对转矩脉动 的影响;设计了一种BLDC的无速度传感器高速 驱动控制方案。通过试验验证了新型控制策略 的性能。 1 低速时的转子位置检测 图1 为高速无刷直流电…

C++的特殊类设计 饥饿汉模式

目录 特殊类设计 设计一个不能被拷贝的类 设计一个只能在堆上创建对象的类 设计一个只能在栈上创建对象的类 设计一个不能继承的类 设计模式 单例模式 饿汉模式 饥汉模式 特殊类设计 设计一个不能被拷贝的类 C98的设计方式&#xff1a;将该类的拷贝构造和赋值运算符…

UDS服务——RequestTransferExit(0x37)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍RequestTransferExit(0x37)—— 请求传输退出,用于终止数据传输的(上传/下载)。通过阅读本文,希望能对你有所帮助。 文章目录 诊断协议那些事儿请求传输退出服务介绍一、服务请求报文定义transferRequestParame…

[SAP ABAP] 删除内表数据

1.利用索引删除数据 语法格式 DELETE <itab> INDEX <idx>. <itab>&#xff1a;代表内表 <idx>&#xff1a;代表索引值 删除内表<itab>中的第<idx>条记录 示例1 lt_student内表中存在3条数据记录 我们使用如下指令删除内表中的第一条数…

AIGC-Animate Anyone阿里的图像到视频 角色合成的框架-论文解读

Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation 论文:https://arxiv.org/pdf/2311.17117 网页:https://humanaigc.github.io/animate-anyone/ MOTIVATION 角色动画的目标是将静态图像转换成逼真的视频&#xff0c;这在在线零…