Redis之持久化操作

news2024/11/18 21:39:23

目录

一、简介

二、RDB

1、自动触发

2、手动触发

3、RDB 的优点和缺点

三、AOF

1、AOF的工作流程

2、AOF的配置

3、AOF的优点和缺点 

4、俩种持久化的方式如何选择?


一、简介

1、什么是持久化?

持久化是指将内存中的数据同步到磁盘中,避免由于一些异常而导致redis中的数据丢失。

当 redis 实例重启时,可利用之前持久化的文件进行恢复

2、redis持久化的俩种方式

  • RDB(全量保存)
  • AOF(增量保存)

二、RDB

指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。这个快照文件就是 RDB 文件(dump.rdb)

RDB 实现持久化的方式有俩种

  • 自动触发
  • 手动触发

在讲这俩种方式之前,先来解释一下关于RDB持久化的配置:

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

# 当 3600s 内有一个 key 发生变化就会执行一次持久化
# 当 300s 内有 100 个 key 发生变化时就会执行一次持久化
# 当 60s 内有 10000 个key 发生变化时就会执行一次持久化
#   save ""
save 900 1
save 300 10
save 60 10000

# 当硬盘内存满了之后,不会再去执行写入
stop-writes-on-bgsave-error yes

#  对于生成的备份文件是否进行压缩
rdbcompression yes

# 在存储快照后,还可以让redis使用CRC64算法来进行数据校验,
# 但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能(推荐开启yes)
rdbchecksum yes

# 备份的文件名
dbfilename dump.rdb

# 在没有持久性的实例中删除复制使用的RDB文件
rdb-del-sync-files no

# 备份文件的所在位置。 默认在 redis 启动目录中。/usr/local/bin/ 下`
dir ./

在Redis7之后,进行持久化的时间配置有一些变化:

# save ""
# save 3600 1 300 100 60 10000

1、自动触发

首先修改一下配置

################################ SNAPSHOTTING  ################################
# 在5s内有俩个写操作就会进行一次持久化
save 5 2

stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes

dbfilename dump.rdb

rdb-del-sync-files no

dir /myredis/dumpfiles/

可以通过 config get dir 命令查看 rdb 文件保存的目录: 

127.0.0.1:6379> CONFIG GET dir
dir
/myredis/dumpfiles

演示

 初始状态下,未执行任何操作,也没有 dump.rdb 文件

 当我们 5s 内进行俩次写操作时,就会生成一个 dump.rdb 文件

 值得注意的是:当我们执行  FLUSHALL/FLUSHDB/shutdown 命令时,也会生成一个 dump.rdb 文件

 那么我们如何使用 dump.rdb 文件恢复数据呢?

其实也不用我们有过多的操作,dump.rdb 文件是和 redis 服务器中的数据实时更新同步的,因此我们可以使用一个定时任务,定时备份最近几天的 dump.rdb 文件,当然,尽量避免 dump.rdb 文件和 redis 服务器在同一台机器上,如果你的 reids服务器gua了,你的 dump文件也没了,那数据就真的没了~

2、手动触发

在 Redis 中提供了俩个命令:save/bgsave 可以手动生成 dump.rdb 文件

(1)save

这个命令大家尽量不要用,因为当执行这个命令时,持久化操作会在主进程执行,会阻塞当前的 redis 的服务器,直到持久化完成。也就是说,在执行 save 命令后,你的redis是无法使用的。

  

(2)bgsave 

bgsave 会以异步的方式进行持久化操作, redis 会调用 fork() ,复制出一个与父进程一样子进程,由子进程来完成持久化操作。不会影响redis的执行。

 

3、RDB 的优点和缺点

优点

  1. 相对于数据集大时,比 AOF 的启动效率更高。

  2. 性能最大化,利用 fork 子进程完成持久化操作,主进程不会进行任何的 IO 操作,保证了高性能

  3. 节省磁盘空间

  4. 恢复速度快

缺点

数据安全性低。 RDB 是间隔一段时间进行持久化,如果持久化之间 Redis 发生故障,会发生数据
丢失。所以这种方式更适合数据要求不严谨的时候

总结

什么时候会触发生成 rdb 文件? 

  •  配置文件中手动配置 生成配置文件的策略
  • 使用 save/bgsave 命令
  • 使用 FLUSHALL/FLUSHDB/SHUTDOWN 命令
  • 主从复制时,主节点自动触发

RDB 的工作流程:

  • Redis 调用 fork. 同时拥有父进程和子进程。

  • 子进程将数据集写入到一个临时 RDB 文件中。

  • 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。

三、AOF

日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

 

1、AOF的工作流程

(1)客户端的请求写命令会被 append 追加到AOF缓冲区内;

(2)AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中;

(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件 rewrite 重写,压缩AOF文件容量;

(4)Redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的;

2、AOF的配置

AOF默认是关闭的,需要手动开启,下面是关于AOF的配置
 

############################## APPEND ONLY MODE ###############################
# 改成 yes 开启 AOF 功能
appendonly yes
# 文件名
appendfilename "appendonly.aof"
# ===============================以下就是 AOF 的三种策略================================

# 始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性比较好
# appendfsync always

# 每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。
appendfsync everysec

# redis不主动进行同步,把同步时机交给操作系统。
# appendfsync no

注意

在 Redis7 之后,文件名、文件位置都发生了比较大的变化。

文件位置

Redis7 以前,aof文件的保存位置和 rdb文件一致 

在 Redis7 之后,采用 dir + appenddirname 的方式确定 aof 文件的位置

# aof文件最终的位置:/myredis/aoffiles
dir /myredis/
appenddirname "aoffiles"

文件名

 Redis7采用  Multi Part Aof 的设计 , 将一个 aof 文件拆分成了三个文件,文件名前缀依然由 appendfilename 指定。

# aof 文件会被拆分成以下三个文件
# - appendonly.aof.1.base.rdb as a base file.
# - appendonly.aof.1.incr.aof, appendonly.aof.2.incr.aof as incremental files.
# - appendonly.aof.manifest as a manifest file.

appendfilename "appendonly.aof"

# 拆分的三个文件都会保存在 appendonlydir 目录下
appenddirname "appendonlydir"

演示

redis 的写操作都会记录在  incr 这个文件中,读操作不记录:

当 AOF 文件损坏时,执行: redis-check-aof --fix  appendonly.aof.1.incr.aof  进行修复

3、AOF的优点和缺点 

优点

  • 备份机制更稳健,丢失数据概率更低。

  • 可读的日志文本,通过操作AOF稳健,可以处理误操作。

    • 比如:不小心 执行 FLUSHALL 命令,可以通过删除 AOF 文件中的 FLUSHALL 命令,并重启即可恢复。

缺点

  • 比起RDB占用更多的磁盘空间。

    • 因为 AOF 不仅记录数据,还会记录一些写的指令

  • 恢复备份速度要慢。

  • 每次读写都同步的话,有一定的性能压力。

4、俩种持久化的方式如何选择?

Redis 支持同时开启开启两种持久化方式,我们可以综合使用 AOF 和 RDB 两种持久化机制,用 AOF 来保证数据不丢失,作为数据恢复的第一选择; 用 RDB 来做不同程度的冷备,在 AOF文件都丢失或损坏不可用的时候,还可以使用 RDB 来进行快速的数据恢复。

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

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

相关文章

策略模式详解

文章目录策略模式(行为模式)1. 策略模式介绍2. 好处3. 场景案例4. 案例源码1. 代码结构2. 榜单服务接收消息入口3. 基础任务类4. 定义策略模式转发的规范5. 代理的第一层6. 代理的第二层抽象父类:定义视频聊榜单代理规范7. 代理的第二层实现子…

elasticsearch自定义企业词典

我们中文分词用的是ik,但是ik只是对基本的中文词进行了分词,而对于企业或者人名没有进行分词。比如,我搜索中国平安,那么ik只能分成中国、平安如果这样,这肯定是不行滴!接下来,俺就教你&#xf…

历史上被发现的第一个真正的Bug - Grace Hopper

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

【bug】antd全局的主题色样式被覆盖,被修改为`antd`默认的主题色

背景: 项目本身修改了主题色,配置如下: // umi配置文件 export default {theme: {primary-color: #2F54EB, // 全局主色}, };需要对图片上传组件做封装,并在项目中统一引用,如下 import { TdsUpload } from tdsComponents;环境信息 node tiandstiandsdeMacBook…

【JavaEE】前后端分离实现博客系统(页面构建)

文章目录1 效果展示1.1 博客登录页面1.2 博客列表页面1.3 博客详情页面1.4 博客编辑页面2 页面具体实现2.1 博客列表页的实现2.2 博客详情页的实现2.3 博客登录页面的实现2.4 博客编辑页面的实现写在最后1 效果展示 1.1 博客登录页面 用于实现用户的登录功能,并展…

2023年3月西安/杭州/深圳/东莞NPDP产品经理认证考试报名

产品经理国际资格认证NPDP是国际公认的唯一的新产品开发专业认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年…

什么是量子计算?

什么是量子计算? 量子计算机仍处于起步阶段,正在影响已经在经典计算机上运行的新一代模拟,现在使用 NVIDIA cuQuantum SDK 进行加速。 在史蒂夫乔布斯 (Steve Jobs) 推出可以放入口袋的计算机之前 27 年,物理学家保罗贝尼奥夫 (P…

[MySQL核心]2.select单表查询常见操作

MySQL核心--select单表查询常见操作select单表查询常见操作关于通配符*的使用结合MySQL运算符去重distinct空值查询union合并查询带in子查询(重点)limit分页查询排序order by分组group by笔试实践问题(新浪)select单表查询常见操作 关于通配符*的使用 项…

记录实现操作系统互斥锁的一次思考

今天实现操作系统互斥锁的时候遇到一个有趣的问题。 场景 有两个进程分别名为 taskA,taskB,采取时间片轮转的方式交替运行——也即维护了一个 ready_queue,根据时钟中断来 FIFO 地调度任务。它们的任务是无限循环调用 sys_print() 来打印自…

华为OD机试题,用 Java 解【用户调度问题】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

Java基础常识

目录 JDK和JRE和JVM分别是什么?有什么关系? 什么是字节码,采用字节码的好处是什么 ? Java 程序从源代码到运行的过程 为什么 Java语言"编译与解释并存" Java 和 C、Go 语言的区别,各自的优缺点? JDK和JRE和JVM分别是什么?有什么关系…

Flink相关介绍

简介 Flink的定位是:Apache Flink是一个框架和分布式处理引擎,如图所示,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境运行,以内存执行速度和任意规模来执行计算。 Flink 框架处理流程应用场景 1、电…

程序员应该如何学习算法?

算法不是纯粹拼智商的,初学者不要上来直接撸《算法导论》!这是血泪 建议一:首先你得会一门程序设计语言 建议二:基础知识,数据结构,推荐大家看一下《大话数据结构》这本书,这本书看过感觉&…

华为OD机试用Python实现 -【连续字母长度 or 求第 K 长的字符串长度】 | 2023.Q1 A卷

华为OD机试题 本篇题目:连续字母长度 or 求第 K 长的字符串长度题目输入描述输出描述示例一输入输出说明示例二输入输出说明示例三输入输出说明Code代码编写逻辑最近更新的博客 华为od 2023 | 什么是华为od,od

zookeeper使用场景实战

ZK java客户端 zk官方客户端没有和服务端分离,同一个jar文件,我们直接引入zk的maven即可。注意版本匹配兼容 Curator curator java语言编程的zk客户端框架,curator项目是现在zk客户端中使用最多。 将我们平时使用的zk服务开发进行了封装&a…

【Linux】进程状态(阻塞、挂起、僵尸进程)

文章目录1 阻塞与挂起1.1 阻塞1.2 挂起2 进程状态前言: 当我们在Windows下双击运行一个程序,或是在Linux下通过 ./ 加载运行一个程序,是否就代表对应的进程就一直处在运行状态呢?其实不然,一个进程有许多不同的状态。当…

科技和女性的今天,《赛博格宣言》半个世纪前就预言了

近几年,我们团队在实地探访各行各业数字化时,格外关注女性工作者的存在,一个强烈感受是:和女性主义理论中说的一样,因为有了数字化技术,工作对于体力、精力等要求不再苛刻,岗位上的女员工就多了…

设计模式~门面(外观)模式(Facade)-08

目录 (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: (6)源码中的经典应用 代码 外观模式&am…

类和对象万字详解

目录 一、面向对象与面向过程的区别 面向过程: 面向对象: 二、类的引入 class与struct爱恨情仇 class的语法 类的定义: 类的限定访问符 类的实例化 类对象模型 this指针的应用 三、封装 四、类的六个默认成员函数 构造函数 再谈…

基于NMOSFET的电平转换电路设计

一、概述: 在单片机系统中,5V、3.3V是芯片常用的电平。而在传输协议中(如IIC、SPI等协议),存在芯片与芯片的高电平和低电平定义的范围不一样,所以需要存在一个电平转换电路,来使芯片与芯片之间顺利的传输。 二、前置…