尚硅谷redis7 28-32 redis持久化之理论介绍

28redis持久化之理论介绍

redis持久化:redis如何将内存数据写入磁盘中

为什么需要持久化?

内存数据一断电就会消失,那么所有的请求都会打到数据库中。因此让redis中的数据长期持有,不管是重启、故障、恢复、宕机,还是能从磁盘上读回曾经保存的数据。

一般redis持久化指的是RDB[Redis Database] 和 AOF[Append Only File]。可以选择其中一种,也可以两种都使用,将内存数据写入磁盘中。

  • persistent snapshot【RDB】:快照,将数据打包生成rdb文件。用于整体恢复。
  • Append Only File【AOF】:将所有写命令的操作都记录下来。恢复时挨个挨个重新运行一次。

29 redis持久化之RDB简介

RDB(Redis数据库):RDB持久性以指定的时间间隔执行数据集的时间点快照。

实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是
快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。
这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写。

如果服务器挂了,redis缓存数据在重启的时候将会通过硬盘里存储的rgb文件加载回来。

作用:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot内存快照,它恢复时再将硬盘快照文件直接读回到内存里
一锅端:Redis的数据都在内存中,保存备份时它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中,一锅端

Rdb保存的是dump.rdb文件

redis6版本的redis.conf文件中找到snapshotting ,主要用来设置redis中的rdb。

######## SNAPSHOTTING#######

Save the DB on disk:

save <seconds> <changes>

Will save the DB if both the given number of seconds and the given
number of write operations against the DB occurred.

In the example below the behavior will be to save:  //发生以下行为将会保存
after 900 sec (15 min) if at least 1 key changed // 15分钟内有1次修改
after 300 sec (5 min) if at least 10 keys changed // 5分钟内有10此修改
after 60 sec if at least 10000 keys changed  // 1分钟内有1万次修改

Note: you can disable saving completely by commenting out all "save" lines.

It is also possible to remove all the previously configured save
points by adding a save directive with a single empty string argument
like in the following example:

save ""

save 900 1
save 300 10
save 60 10000

总结:

Redis6.0.16以下

自动触发:
在 Redie.conf 配置文件中的 SNAPSHOTTING 下配置 save 参数,来触发Redis的 RDB持久化条件,
比如“save m n”:表示m秒内数据集存在 n 次修改时,自动触发 bgsave
save 900 1:每隔 900s(15min),如果有超过1个key 发生了变化,就写一份新的 RDB 文件
save 300 10:每隔 300s(5min),如果有超过10个key 发生了变化,就写一份新的 RDB 文件
save 60 10000:每隔 60s(1min),如果有超过 10000个key发生了变化,就写一份新的RDB文件

redis7

除非另有指定,Redis 默认会在以下情况下保存数据库(持久化):

  • 在 3600 秒(1 小时)后,如果至少执行了 1 次修改

  • 在 300 秒(5 分钟)后,如果至少执行了 100 次修改

  • 在 60 秒后,如果至少执行了 10000 次修改

30 redis持久化之RDB配置说明

网站说明:

默认情况下,Redis 会将数据集的快照保存到磁盘上的一个名为 dump.rdb 的二进制文件中。
你可以配置 Redis:当在 N 秒内数据集发生了至少 M 次修改时,就自动保存一次数据集,或者你也可以手动调用 SAVEBGSAVE 命令来执行保存操作。

案例5秒2次修改

vim redis7.conf

linux常用快捷键:

复制:Ctrl + Shift + C

粘贴:Ctrl + Shift + V

保存并退出:esc  :wq

保存不退出:esc :w

修改文件:i 在当前光标前插入

vim中查找:

  • 输入 /关键词 然后回车 → 向下查找

  • 输入 ?关键词 然后回车 → 向上查找

  • n → 查找下一个匹配

  • N → 查找上一个匹配

我没有修改路径,所以进入redis.conf还是按照默认的路径

cd /usr/local/src/redis路径

vim redis.conf

save 5 2

修改dump文件保存路径

修改dump文件名称

修改后重启一下配置文件

redis-server redis.conf的文件路径

操作时的tips: 刚开始配置并没有成功,但路径下出现了log文件。检查后发现是reids端口被占用导致配置失败。因此重启配置文件的时候一定要关闭目前的redis进程。【sudo systemctl stop redis 停止已有的 Redis 实例或其他占用该端口的程序】。

31 redis持久化之RDB自动触发

save 5 2的含义是在5s秒修改两次就进行快照。如图,5s内更改一次并不会更新rdb文件。

如何恢复

将备份文件(dump.rdb)移动到redis安装目录并启动服务即可。备份成功后故意用flushdb清空redis,看看是否可以恢复数据
物理恢复,一定服务和备份分机隔离

把当前目录下的 dump6379.rdb 文件 重命名dump6379.rdb.bak

mv dump6379.rdb dump6379.rdb.bak

在redis中清掉当前数据

FLUSHDB

此时再检查 /myredis/dumpfiles目录

因为当我们使用一个提交命令,类似于终止命令时,redis为了保证事物的一致性,也会自动生成rdb文件。

重启一下配置文件

redis-server redis.conf的文件路径

再次连接redis服务器后运行keys* 发现redis数据库为空

因为重新连接时,redis加载的是新生成的rdb文件。而此文件提交时清空了数据库,因此加载后数据库也为空。

结论:执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义

快捷键  退出redis:输入quit ,exit或按ctrl+D

物理恢复

首先强制删除掉/myredis/dumpfiles中的dump6379.rdb文件

rm -f dump6379.rdb

SHUTDOWN  // 退出

// 发现/myredis/dumpfiles中又生成了dump6379.rdb文件

 SHUTDOWN :

  • SHUTDOWN 是 Redis 的内置命令,会优雅地关闭 Redis 服务。

  • 它会将内存中的数据持久化到 dump.rdb(如果配置了 RDB),然后关闭服务。

再次清除掉/myredis/dumpfiles中的dump6379.rdb文件

把当前目录下的 dump6379.rdb.bak 文件 重命名dump6379.rdb

此时再重新启动配置文件,数据库恢复。

备注:不可以把备份文件dump.rdb和生产redis服务器放在同一台机器,必须分开各自存储
以防生产机物理损坏后备份文件也挂了。

32 redis持久化之RDB手动触发

为什么要手动触发?假如我们存储了很重要的数据,那么手动立刻保存更加保险。

redis提供了两个命令来生成RDB文件,分别是save和bgsave

工作原理(How it works)

每当 Redis 需要将数据集保存到磁盘时,会执行以下操作:

  1. Redis 会进行一次 fork 操作(派生一个新进程)。此时会有一个 子进程 和一个 父进程

  2. 子进程并不影响出进程的运行,开始将数据集写入一个 临时的 RDB 文件

  3. 当子进程完成新 RDB 文件的写入后,它会 替换旧的 RDB 文件

这种方式使 Redis 能够利用操作系统的 写时复制(copy-on-write)机制 来提高效率。

save【一般不适用】

在主程序中执行会阻塞当前redis服务器,直到持久化工作完成。执行save命令期间,Redis不能处理其他命令【包括缓存服务器对外提供服务的功能,若redis数据量很大,则save的过程会严重阻碍其他进程的运行】,线上禁止使用

bgsave

Redis会在后台异步进行快照操作,不阻塞快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。

Redis会使用bgsave对当前内存中的所有数据做快照,这个操作是子进程在后台完成的,这就允许主进程同时可以修改数据。
fork是什么?:程序【父进程】运行到 fork() 时,会从当前进程中“克隆”出一个一模一样的新进程【子进程】,两者并行运行。

LASTSAVE

可以通过lastsave命令获取最后一次成功执行快照的时间

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

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

相关文章

JS逆向【抖查查】逆向分析 | sign | secret签名验证

1.目标 目标网址&#xff1a;https://www.douchacha.com/bloggerRankingRise 切换日期出现目标请求 import requests import jsonheaders {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q0.9","…

【数据仓库面试题合集④】SQL 性能调优:面试高频场景 + 调优策略解析

随着业务数据规模的持续增长,SQL 查询的执行效率直接影响到数据平台的稳定性与数据产出效率。因此,在数据仓库类岗位的面试中,SQL 性能调优常被作为重点考察内容。 本篇将围绕常见 SQL 调优问题,结合实际经验,整理出高频面试题与答题参考,助你在面试中游刃有余。 🎯 高…

python打卡训练营打卡记录day37

知识点回顾&#xff1a; 过拟合的判断&#xff1a;测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint&#xff0c;还包含训练状态 早停策略 作业&#xff1a;对信贷数据集训练后保存权重&#xff0c;加载权重后继续训练50轮&#xf…

卷积神经网络(CNN)深度讲解

卷积神经网络&#xff08;CNN&#xff09; 本篇博客参考自大佬的开源书籍&#xff0c;帮助大家从头开始学习卷积神经网络&#xff0c;谢谢各位的支持了&#xff0c;在此期待各位能与我共同进步​ 卷积神经网络&#xff08;CNN&#xff09;是一种特殊的深度学习网络结构&#x…

深度体验:海螺 AI,开启智能创作新时代

人工智能 AI 工具如雨后春笋般涌现&#xff0c;而海螺 AI 以其独特的魅力与卓越的性能&#xff0c;迅速在众多产品中崭露头角&#xff0c;成为了无数创作者、办公族以及各行业人士的得力助手。近期&#xff0c;我对海螺 AI 进行了深入的使用体验&#xff0c;接下来就为大家详细…

哈希表day5

242 有效的字母异位词 思路就是转为ASCII码&#xff0c;然后用一个数组记录26位字母出现的次数 #include <string> class Solution{ public:bool isAnagram(string s,string t){int record[26]{0};for (int i0;i<s.size();i){record[s[i]-a];}for (int i0;i<t.si…

【Python数据库全栈指南】从SQL到ORM深度实践

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…

Android磁盘占用优化全解析:从监控到治理的存储效率革命

引言 随着移动应用功能的复杂化&#xff0c;磁盘占用问题日益突出。据统计&#xff0c;国内头部应用的平均安装包大小已超100MB&#xff0c;运行时缓存、日志、图片等数据更可能使磁盘占用突破GB级。过度的磁盘消耗不仅影响用户设备空间&#xff0c;还可能触发系统的“应用数据…

AJAX-让数据活起来(一):入门

目录 一、AJAX概念和axios使用 1.1 什么是AJAX ? 1.2 怎么用AJAX ? 1.3 axios使用 二、认识URL 2.1 什么是URL? 2.2 URL的组成 组成 协议 域名 资源路径 获取-新闻列表 三、URL查询参数 URL查询参数 axios - 查询参数 四、常用请求方法和数据提交 常用请求…

【C++篇】list模拟实现

实现接口&#xff1a; list的无参构造、n个val构造、拷贝构造 operator重载 实现迭代器 push_back() push_front() erase() insert() 头尾删 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace liu {//定义list节点temp…

Go 语言范围循环变量重用问题与 VSCode 调试解决方法

文章目录 问题描述问题原因1. Go 1.21 及更早版本的范围循环行为2. Go 1.22 的改进3. VSCode 调试中的问题4. 命令行 dlv debug 的正确输出 三种解决方法1. 启用 Go 模块2. 优化 VSCode 调试配置3. 修改代码以确保兼容性4. 清理缓存5. 验证环境 验证结果结论 在 Go 编程中&…

快速创建 Vue 3 项目

安装 Node.js 和 Vue CL 安装 Node.js&#xff1a;访问 https://nodejs.org/ 下载并安装 LTS 版本。 安装完后&#xff0c;在终端检查版本&#xff1a; node -v npm -v安装 Vue CLI&#xff08;全局&#xff09;&#xff1a; npm install -g vue/cli创建 Vue 3 项目 vue cr…

java学习日志——Spring Security介绍

使用Spring Security要重写UserDetailsService的loadUserByUsername方法&#xff08;相当于自定了认证逻辑&#xff09;

【C++进阶篇】初识哈希

哈希表深度剖析&#xff1a;原理、冲突解决与C容器实战 一. 哈希1.1 哈希概念1.2 哈希思想1.3 常见的哈希函数1.3.1 直接定址法1.3.2 除留余数法1.3.3 乘法散列法&#xff08;了解&#xff09;1.3.4 平方取中法&#xff08;了解&#xff09; 1.4 哈希冲突1.4.1 冲突原因1.4.2 解…

单机Kafka配置ssl并在springboot使用

目录 SSL证书生成根证书生成服务端和客户端证书生成keystore.jks和truststore.jks辅助脚本单独生成truststore.jks 环境配置hosts文件kafka server.properties配置ssl 启动kafkakafka基础操作springboot集成准备工作需要配置的文件开始消费 SSL证书 证书主要包含两大类&#x…

PCB设计教程【入门篇】——电路分析基础-元件数据手册

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理&#xff0c;为个人学习记录&#xff0c;旨在帮助PCB设计新手入门。所有内容仅作学习交流使用&#xff0c;无任何商业目的。若涉及侵权&#xff0c;请随时联系&#xff0c;将会立即处理 目录 前言 一、数据手册的重要…

Vue2实现Office文档(docx、xlsx、pdf)在线预览

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

【辰辉创聚生物】JAK-STAT信号通路相关蛋白:细胞信号传导的核心枢纽

在细胞间复杂的信号传递网络中&#xff0c;Janus 激酶 - 信号转导和转录激活因子&#xff08;JAK-STAT&#xff09;信号通路犹如一条高速信息公路&#xff0c;承担着传递细胞外信号、调控基因表达的重要使命。JAK-STAT 信号通路相关蛋白作为这条信息公路上的 “关键节点” 和 “…

OceanBase数据库从入门到精通(运维监控篇)

文章目录 一、OceanBase 运维监控体系概述二、OceanBase 系统表与元数据查询2.1 元数据查询基础2.2 核心系统表详解2.3 分区元数据查询实战三、OceanBase 性能监控SQL详解3.1 关键性能指标监控3.2 SQL性能分析实战四、OceanBase 空间使用监控4.1 表空间监控体系4.2 空间使用趋势…

linux 进程间通信_共享内存

目录 一、什么是共享内存&#xff1f; 二、共享内存的特点 优点 缺点 三、使用共享内存的基本函数 1、创建共享内存shmget() 2、挂接共享内存shmat 3、脱离挂接shmdt 4、共享内存控制shmctl 5.查看和删除共享内存 comm.hpp server.cc Client.cc Makefile 一、什么…