redis持久化操作【随记】

news2024/11/19 21:59:44

持久化

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文件,会变成二进制文件.此时就没有办法了.

 

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

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

相关文章

帕金森患者饮食指南:科学调养,呵护健康

&#x1f33c;在医学的广阔领域中&#xff0c;帕金森病作为一种慢性神经系统疾病&#xff0c;除了需要专业的医疗治疗外&#xff0c;日常饮食的调养也显得尤为重要。 今天&#xff0c;就为大家带来一份专为帕金森患者打造的饮食建议&#xff0c;希望能为大家的健康调养提供一些…

泛微E9与金蝶云星空ERP的无缝集成案例详解(包括接口与字段)

业务系统现状 背景介绍 泛微E9和金蝶云星空ERP是两款广泛应用与企业管理的信息系统&#xff0c;分别在移动办公自动化和企业资源计划管理领域占据重要地位。然而企业在使用这些系统时往往面临着信息孤岛和系统孤立的问题&#xff0c;导致数据无法在不系统之间高效流转共享。 当…

微服务——服务治理

目录 1 什么是服务治理&#xff1f;2 为什么需要服务治理&#xff1f;3 服务治理的关键点3.1 服务注册与发现3.2 负载均衡3.3 容错与熔断3.4 服务监控与告警3.5 服务配置管理 4 示例说明5 总结 1 什么是服务治理&#xff1f; 简单来说&#xff0c;服务治理就是对微服务架构中的…

Java:113-Spring Data JPA详解

Spring Data JPA详解 Spring Data Jpa 是应用于Dao层的⼀个框架&#xff0c;简化数据库开发的&#xff0c;作用和Mybatis框架⼀样&#xff0c;但是在使用方式和底层机制是有所不同的&#xff0c;最明显的⼀个特点&#xff0c;Spring Data Jpa 开发Dao的时候&#xff0c;很多场景…

气膜建筑:持久耐用的建筑选择—轻空间

随着科技的发展&#xff0c;气膜建筑以其快速施工、节能环保和灵活多用的特点&#xff0c;正在各个领域获得越来越多的应用。然而&#xff0c;许多人对气膜建筑的耐用程度仍存有疑虑。本文将从气膜建筑的材料、结构设计和维护等方面&#xff0c;深入探讨气膜建筑的耐用性&#…

【Android WebView】WebView基础

一、简介 WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核&#xff0c;4.4后直接使用了Chrome。 二、重要类 以WebView类为基础&#xff0c;WebSettings、WebViewClient、WebChromeClient为辅助共同完成安卓段加…

阿里云,大周末彻底要爆!

大家好&#xff0c;我是肉哥&#xff0c;熟悉我的人都知道&#xff0c;每年6.18我都会带领大家薅阿里云的羊毛&#xff0c;今年也不例外&#xff0c;作为程序员搞台ECS&#xff0c;做个项目满满的成就感&#xff01;阿里内部小伙伴透漏&#xff0c;今年的618活动优惠力度更是拉…

FlinkCDC pipeline模式 mysql-to-paimon.yaml

flinkcdc 需要引入&#xff1a; source端&#xff1a; flink-cdc-pipeline-connector-mysql-xxx.jar、mysql-connector-java-xxx.jar、 sink端&#xff1a; flink-cdc-pipeline-connector-paimon-xxx.jar flinkcdc官方提供connect包下载地址&#xff0c;pipeline模式提交作业和…

成章数据库安装体验

对标Redis的国产数据库 一位来自国产数据库的朋友想请我试用一下他们的产品。并且直言早期问题比较多&#xff0c;还请多多包涵。一般对于这种比较客观和友好的我都愿意试试。对于怼天怼地吊打谁的我个人就不尝试了。 他们中文名字叫“成章数据库“我就尝试从一个不了解产品的…

Qt底层原理:深入解析QWidget的绘制技术细节(1)

在Qt5中&#xff0c;QWidget的绘制流程比较分散&#xff0c;网上介绍的文章也很少&#xff0c;因此写一篇文章总结记录一下这部分的知识点。 笔者使用的是Qt5.15.2的源码。 基本的绘制流程&#xff1a;从update到合成 更新请求&#xff08;Invalidate&#xff09;: 当一个QWidg…

线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))

1通信机制&#xff1a;互斥与同步 线程的互斥通过线程的互斥锁完成&#xff1b; 线程的同步通过无名信号量或者条件变量完成。 2 互斥 2.1 何为互斥&#xff1f; 互斥是在多个线程在访问同一个全局变量的时候&#xff0c;先让这个线程争抢锁的资源&#xff0c;那个线程争抢…

理解广角镜头的视野和畸变

为什么广角镜头的视野会比长焦镜头的视野大呢&#xff1f; 我之前用等光程解释了景深&#xff0c;也解释了为什么焦距越远&#xff0c;成像越大&#xff0c;但是从来没有提到过视野范围这个概念。实际上在我之前建立的数学模型中&#xff0c;物曲面S是无限大的&#xff0c;像曲…

python:画圆圈,绘制生命之花图案

参阅&#xff1a;生命之花/平衡轮&#xff1a;一个实用的人生规划的工具 先画一个圆圈&#xff0c;编写 draw_circle1.py 如下 # -*- coding: utf-8 -*- """ 画一个圆圈 """ import numpy as np from matplotlib import pyplot as plt# 用于…

(done) 关于 GNU/Linux API setenv 的实验

写一个下面的代码来验证 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h>int main() {// 设置环境变量 MY_VAR 的值为 "hello_world"if (setenv("MY_VAR", "hello_world", 1) ! 0…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-29残差网络ResNet

29残差网络ResNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个继承自nn.Module的残差块类 class Residual(nn.Module):def __init__(self, input_channels, num_chan…

adb 查看哪些应用是双开的

adb shell pm list users 得到 这 里有 user 0 ,11,999 其中0是系统默认的&#xff0c;11是平行空间的&#xff0c;999是双开用户 pm list packages --user 999 -3 得到了999用户安装第三方应用的包名 pm list packages --user 11 -3 得到了隐私空间用户安装第三方应用的…

Git客户端安装步骤详解

git windows7 百度经验:jingyan.baidu.com 方法/步骤 1 从git官网下一个git安装包。 步骤阅读 2 点击git.exe安装程序&#xff0c;点击【next】 ![git的安装和配置](https://imgsa.baidu.com/exp/w500/sign7565f44ba58b87d65042ab1f37092860/21a4462309f790525e5b0144…

兰州理工大学24计算机考研情况,好多专业都接受调剂,只有计算机专硕不接收调剂,复试线为283分!

兰州理工大学&#xff08;Lanzhou University of Technology&#xff09;&#xff0c;位于甘肃省兰州市&#xff0c;是甘肃省人民政府、教育部、国家国防科技工业局共建高校&#xff0c;甘肃省高水平大学和“一流学科”建设高校&#xff1b;入选国家“中西部高校基础能力建设工…

Android-系统开发_四大组件篇----探讨-Activity-的生命周期

当一个活动不再处于栈顶位置&#xff0c;但仍然可见时&#xff0c;这时活动就进入了暂停状态。你可能会觉得既然活动已经不在栈顶了&#xff0c;还怎么会可见呢&#xff1f; 这是因为并不是每一个活动都会占满整个屏幕&#xff0c;比如对话框形式的活动只会占用屏幕中间的部分…

Retrieval-Augmented Generation for Large Language Models A Survey

Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 文章目录 Retrieval-Augmented Generation for Large Language Models: A Survey 文献综述 Abstract背景介绍 RAG概述原始RAG先进RAG预检索过程后检索过程 模块化RAGModules部分Patterns部分 RAG…