[沫忘录]Redis 持久化

news2024/11/5 19:04:33

[沫忘录]Redis 持久化

Redis的数据主要储存于内存,如果不将这些数据以某种方式持久化到磁盘上做备份,则很有可以在各种突发情况而导致的Redis崩溃中丢失数据。

持久化主要有以下四种方式:

RDB:数据快照保存。

AOF:保存写日志到磁盘上。

No persistence:不做任何持久化处理,纯缓存模式。

RDB + AOF:采用RDB和AOF混合的方式,对数据进行可持久化处理。

RDB(redis database)

RDB 持久性以指定时间间隔执行数据集的时间点快照,快照通常储存在RDB文件(dump.rdb)中。

redis[7].conf参数设置

#在配置文件中SNAPSHOTTING模块下
#设置second秒后修改达change次后,保存快照
save <second> <change>

默认配置:
Redis6.0.16以下
save 900 1
save 300 10
save 60 10000

Redis6.2以及Redis-7.0.0
save 3600 1
save 300 100
save 60 10000

#设置dump文件的保存路径,默认./
dir /myredis/dumpfiles #示例路径(该路径文件已存在)
#设置dump文件名,默认 dump.rdb
dbfilename dump6379.rdb #当有多台redis服务器,在dump后加端口号方便区分

自定义的修改路径可以进入redis里用CONFIG GET dir获取目录

当然,CONFIG GET也可以获取各种配置文件中的参数。

恢复redis数据

执行flushall/flushdb命令会刷新dump.rdb文件成空文件。

shutdown会直接保存当前数据快照。

在一般崩溃时,重启就会从dump.rdb文件读取数据。

而对应执行清空命令时,则需要使用事前拷贝的dump.rdb的副本来替换当前正在使用的rdb文件。(物理恢复)

因此不能将备份文件dump.rdb和生产redis服务器放同一台机器,必须分开各自储存以防生产机物理损害后备份文件也损坏了。

手动触发

redis提供了两个命令来生成RDB文件

#阻塞保存RDB文件,生产禁止使用,严重影响效率
SAVE
#创建子进程保存RDB文件
BGSAVE

#获取最后一次成功保存快照的时间戳
LASTSAVE
#可以在命令行上使用以下命令转换成自然时间
date -d @时间戳
优点
  • 适合大规模的数据备份
  • 按照业务定时备份
  • 对数据的完整性和一致性要求不高
  • RDB文件在内存的加载速度比AOF快得多(AOF需要每条指令都执行,一步步恢复数据)
劣势
  • 备份的时间粒度太大,如果崩溃,丢失最后一次备份之后的数据时,数据偏多
  • RDB会经常创建子进程进行数据备份,如果数据量过大,子进程过多,会导致内存占用过多的同时服务请求产生瞬间延迟。
修复rdb文件

rdb文件内如果出现乱码或违规数据会导致无法启动redis。

此时需要使用指令进行数据修复。

#修复指令
redis-check-rdb /myredis/dumpfiles/dump.rdb #即rdb文件的路径
禁用快照
#短期禁用
redis_cli config set save ""
#永久禁用,在redis.config文件设置
save ""
AOF(append only file)

AOF指以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来,追加在日志文件中。
当Redis启动时,会读取该文件重新构建数据。

AOF默认关闭,当需要使用AOF时,需要在配置文件中设置以下命令

appendonly yes

当写命令到到达Redis Server后,并不会直接写入AOF文件,而是将其先写入AOF缓存区中保存,然后再根据三种写回策略写入AOF文件,类似于MySQL内存中的change buffer缓冲区写入到磁盘上的systemtable系统表空间中。
当AOF文件无法写入(或写入量到达一定峰值)后,会触发重写机制。Redis服务器会根据当前数据库的数据状态,在重写缓冲区中重构AOF文件,然后将新文件覆盖到旧文件上。

三种写回策略
  • Always 每个写回命令执行完后立刻同步地将日志写回磁盘。
  • everysec 每秒写回,每个命令执行完后,先将日志写到AOF文件的内存缓冲区,然后每隔1秒把缓冲区的内容写入到磁盘。
  • no 每个写命令存放在AOF缓冲区,然后由操作系统决定何时写回磁盘空间(如果宕机,丢失数据过多)。

配置参数

appendfsync every sec
版本迭代导致的AOF文件目录变化
  • redis 6及之前,dump.rdb和appendonly.aof文件都储存在同一个目录(RDB目录)下。

  • redis 7及之后,Redis在RDB目录下新建了appendonlydir文件夹用以存放aof文件。

    #配置参数
    appenddirname "appendonlydir"
    
版本迭代导致的AOF文件名变化
  • redis 6及之前,日志信息统一存放在一个AOF文件中。

    #配置参数
    appendfilename "appendonly.aof"
    
  • redis 7及之后,在相同的配置参数下,AOF文件被拆分成多个AOF文件:

    • BASE(如appendonly.aof.1.base.rdb):表示基础AOF, 一般由子进程重写产生,该文件至多一个。
    • INCR(如appendonly.aof.n.incr.aof):表示增量AOF,一般在AOFRW(即AOF文件重写)开始执行时被创建,该文件存在多个。
    • HISTORY:表示历史AOF,每当AOFRW成功后,BASE和INCR文件都将变成HISTORY文件,该文件由Redis自动删除。(该文件不可见但存在)
    • 为了方便管理这些文件,引入了一个manifest(清单)文件来跟踪管理这些AOF文件。
Redis数据恢复

物理恢复同RDB文件一样,需要手动拷贝,手动覆盖。

异常恢复也需要使用指令进行文件恢复。

redis-check-aof --fix 待修复的.incr.aof文件
#这个是日常工作记录数据的最主要文件,一般对该文件进行修复操作。
优势
  • AOF在非纯缓存模式下,最多丢失1秒以内的数据。三种写回策略能够给予用户对性能和数据一致性之间权衡的可操作性。
  • AOF日志是一个仅附加日志,因此不会出现磁盘寻道问题,也不会在断电时出现文件损坏问题。即使因某种原因导致最新的日志写入不全,也能通过redis-check-aof进行文件修复。
  • 当AOF文件过大时,重写机制也能极大的缩减文件体积,避免了因文件溢出导致的数据丢失。
  • AOF文件可读性强且易导出。而且AOF文件能够在某种程度上提供数据回滚机制:当不小心使用FLUSHALL指令清除了所有数据,只要在此期间没有执行日志重写,那么仍可以通过shutdown停止服务器,删除AOF文件的最新指令来恢复数据。
劣势
  • AOF文件通常比相同数据集的等效RDB文件要大。
  • AOF文件的写入频次过高,磁盘IO频繁,相比于RDB,在巨大负载的情况下,延迟可能过高。
  • 由于AOF的恢复策略,导致AOF的数据恢复要慢于RDB。
重写机制

自动触发

配置参数

auto-aof-rewrite-percentage 100 #根据上次重写文件,文件大小增加的百分比幅度
auto-aof-rewrite-min-size 64mb  #触发重写的文件大小
#两者同时满足才会触发重写

正如上面提到的,AOF文件重写是根据数据库当前的数据状态,因此对同一key的写操作只会保留最新的一次。

手动触发

使用指令**BGREWRITEAOF**直接触发重写。

当"重写子进程"完成重写工作后,它会给父进程发一个信号,父进程收到信号后会将内存中缓存的写指令追加到新的AOF文件中,然后用新文件覆盖旧文件。

#是否允许在重写时继续追加新的AOF日志的配置参数
no-appendfsync-on-rewrite no/yes
RDB-AOF混合持久化

RDB和AOF两种模式能够共存。但AOF的优先级比RDB高,当有AOF时,优先由其来进行数据恢复。

#开启混合模式的配置参数
aof-use-rdb-preamble no/yes

在混合模式开启后,RDB模式做全量持久化,AOF模式做增量持久化。当触发重写时,RDB将生成最新数据的快照。

纯缓存模式

即同时关闭RDB和AOF的模式,适用于高性能服务器。

即使禁用了RDB和AOF,我们仍可以手动触发两种模式的文件的生成。

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

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

相关文章

第02章 MySQL环境搭建

一、MySQL的卸载 如果安装mysql时出现问题&#xff0c;则需要将mysql卸载干净再重新安装。如果卸载不干净&#xff0c;仍然会报错安装不成功。 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0…

向量数据库指南》——解锁多模态RAG应用,引领智能问答新时代!

多模态 RAG 应用:解锁智能问答的新维度 在当今这个信息爆炸的时代,我们每天都需要处理海量的数据,这些数据以多种形式存在,包括文本、图像、音频和视频等。随着人工智能技术的飞速发展,尤其是大型语言模型(LLM)的广泛应用,我们越来越依赖于这些智能系统来理解和回应我…

【MySQL 保姆级教学】 复合查询--超级详细(10)

复合查询 1. 复合查询的作用2. 创建将进行操作的表2.1 员工表 emp2.2 部门表 dept2.3 薪资等级表 3. 基本查询回顾4. 多表查询4.1 多表查询的定义4.2 笛卡尔积4.3 内连接 inner join4.4 交叉连接 cross join4.5 左外连接 left join4.6 右外连接 right join4.7 自连接 5. 子查询…

飞桨首创 FlashMask :加速大模型灵活注意力掩码计算,长序列训练的利器

在 Transformer 类大模型训练任务中&#xff0c;注意力掩码&#xff08;Attention Mask&#xff09;一方面带来了大量的冗余计算&#xff0c;另一方面因其 O ( N 2 ) O(N^2) O(N2)巨大的存储占用导致难以实现长序列场景的高效训练&#xff08;其中 N N N为序列长度&#xff09;…

高电压、真差分信号采集的SAR ADC驱动电路设计

1 简介 本设计展示了一种用于驱动高压 SAR ADC 以实现高压全差分信号数据采集的解决方案。该差分信号可能具有广泛的共模电压范围&#xff0c;具体取决于放大器的电源和输入信号振幅。使用一个通用高压精密放大器来执行差分到单端信号转换&#xff0c;并以最高吞吐量驱动 10V 的…

在VS Code中操作MySQL数据库

【基础篇】 【小白专用24.5.26 已验证】VSCode下载和安装与配置PHP开发环境&#xff08;详细版&#xff09;_vscode php-CSDN博客 ~~~~~~~~~~~~~~~~~~~~~~~~~ 在VS Code中下载插件 Prettier SQL VSCode 和 MySQL : 随后在VS Code中点击Database图标 在连接界面输入MySQL数据库…

Java唯一键实现方案

数据唯一性 1、生成UUID1.1 代码中实现1.2 数据库中实现优点缺点 2、数据库递增主键优点 3、数据库递增序列3.1 创建序列3.2 使用序列优点缺点 在Java项目开发中&#xff0c;对数据的唯一性要求&#xff0c;业务数据入库的时候保持单表只有一条记录&#xff0c;因此对记录中要求…

【MySQL】可重复读级别下基于Next Key Lock解决幻读

昨天读到了一篇文章[1]&#xff0c;里面讲&#xff0c;面试官说mysql的可重复读级别下有解决幻读的方式&#xff0c;最后公布了答案&#xff0c;是在sql后面加for update。这么说倒是没错&#xff0c;但是这种问法给我一种奇怪的感觉&#xff0c;因为for update无论在哪个隔离级…

vscode通过.vscode/launch.json 内置php服务启动thinkphp 应用后无法加载路由解决方法

我们在使用vscode的 .vscode/launch.json Launch built-in server and debug 启动thinkphp应用后默认是未加载thinkphp的路由文件的&#xff0c; 这个就导致了&#xff0c;某些thinkphp的一些url路由无法访问的情况&#xff0c; 如http://0.0.0.0:8000/api/auth.admin/info这…

【canal 中间件】canal 实时监听 binlog

文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 canal2.1 安装 canal-admin(可选)2.1.1 启动 canal-admin 容器2.1.2 …

在阿里云快速启动Umami玩转网页分析

阿里云计算巢提供了Umami快速部署能力&#xff0c;使用者不需要自己下载代码&#xff0c;不需要自己安装复杂的依赖&#xff0c;不需要了解底层技术&#xff0c;只需要在控制台图形界面点击几下鼠标就可以快速部署并启动Umami&#xff0c;非技术同学也能轻松搞定。 什么是Umam…

【模型学习之路】手写+分析bert

手写分析bert 目录 前言 架构 embeddings Bertmodel 预训练任务 MLM NSP Bert 后话 netron可视化 code2flow可视化 fine tuning 前言 Attention is all you need! 读本文前&#xff0c;建议至少看懂【模型学习之路】手写分析Transformer-CSDN博客。 毕竟Bert是tr…

stm32移植LVGL(LVGL 8.2.0)

目录 1.下载LVGL源码 2.修改LVGL文件夹 (1)文件夹 examples 改动 (2)文件夹 demos 改动 3.最终LVGL文件夹内容 4.软件Keil配置、添加头文件 5.程序配置 6.其它配置参考链接 1.下载LVGL源码 LVGL源码地址&#xff1a;https://github.com/lvgl/lvgl 2.修改LVGL文件夹…

海南华志亿星电子商务有限公司电商服务的璀璨新星

在这个全民直播、短视频带货风起云涌的时代&#xff0c;抖音电商以其独特的魅力成为了众多商家竞相追逐的蓝海市场。而在这片波澜壮阔的商海中&#xff0c;海南华志亿星电子商务有限公司犹如一颗璀璨的新星&#xff0c;以其专业的服务、创新的策略&#xff0c;为无数商家照亮了…

动手学深度学习66 使用注意力机制的seq2seq

1. 使用注意力机制的seq2seq key value等价 是一个东西 第i个词rnn的输出 根据加权的不同&#xff0c;解码器前面用编码器前面的输出&#xff0c;到后面用后面的输出。 2. code 核心代码: context 怎么算 embedding没变&#xff0c;Decoder加了attention层 class Seq2SeqAt…

高校大数据实训平台介绍

高校大数据实验室架构 具体实训平台介绍 编程实训平台 1、大数据开发实训平台 大数据开发实训平台是面向实训课和课后训练的编程实训平台&#xff0c;平台底层基于Docker技术&#xff0c;采用容器云部署方案&#xff0c;预装大数据相关课程教学所需的实训环境…

【快速上手】pyspark 集群环境下的搭建(Yarn模式)

目录 前言&#xff1a; 一、安装步骤 安装前准备 1.第一步&#xff1a;安装python 2.第二步&#xff1a;在bigdata01上安装spark 3.第三步&#xff1a;同步bigdata01中的spark到bigdata02和03上 二、启动 三、可打开yarn界面查看任务 前言&#xff1a; 上一篇介绍的是…

【ARM Linux 系统稳定性分析入门及渐进 1.2 -- Crash 工具依赖内容】

文章目录 Prerequisites1. 内核对象文件2. 内存镜像3. 平台处理器类型4. Linux 内核版本 Prerequisites crash 工具需要依赖下面的内容&#xff1a; 1. 内核对象文件 vmlinux 文件&#xff1a;需要一个 vmlinux 内核对象文件&#xff0c;在本文中称为命名列表&#xff08;na…

【Canal 中间件】Canal 实现 MySQL 增量数据的异步缓存更新

文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 RocketMQ2.1 创建容器共享网络2.2 启动 NameServer2.3 启动 Broker2.…

Spring Boot2.x教程:(十)从Field injection is not recommended谈谈依赖注入

从Field injection is not recommended谈谈依赖注入 1、问题引入2、依赖注入的三种方式2.1、字段注入&#xff08;Field Injection&#xff09;2.2、构造器注入&#xff08;Constructor Injection&#xff09;2.3、setter注入&#xff08;Setter Injection&#xff09; 3、为什…