广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Redis 通过 RDB 方式进行数据备份与还原的方法
  • 837
分享到

Redis 通过 RDB 方式进行数据备份与还原的方法

2024-04-02 19:04:59 837人浏览 安东尼
摘要

目录IntroRedis 持久化RDB的优点RDB的缺点AOF 优点AOF 缺点备份还原Intro 有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文

Intro

有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文件进行 Redis 数据的备份和还原

Redis 持久化

Redis 的数据持久化有两种机制,一种是 RDB(Redis Database),一种是 AOF(Append Only File)

Redis 提供了不同级别的持久化方式:

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.
  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大.
  • 如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式.
  • 你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整.

RDB的优点

  • RDB是一个非常紧凑的文件,它保存了某个时间点得数据集,非常适用于数据集的备份,比如你可以在每个小时报保存一下过去24小时内的数据,同时每天保存过去30天的数据,这样即使出了问题你也可以根据需求恢复到不同版本的数据集.
  • RDB是一个紧凑的单一文件,很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密),非常适用于灾难恢复.
  • RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他io操作,所以RDB持久化方式可以最大化redis的性能.
  • 与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些.

RDB的缺点

  • 如果你希望在redis意外停止工作(例如电源中断)的情况下丢失的数据最少的话,那么RDB不适合你.虽然你可以配置不同的save时间点(例如每隔5分钟并且对数据集有100个写的操作),是Redis要完整的保存整个数据集是一个比较繁重的工作,你通常会每隔5分钟或者更久做一次完整的保存,万一在Redis意外宕机,你可能会丢失几分钟的数据.
  • RDB 需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求.如果数据集巨大并且CPU性能不是很好的情况下,这种情况会持续1秒,AOF也需要fork,但是你可以调节重写日志文件的频率来提高数据集的耐久度.

AOF 优点

  • 使用AOF 会让你的Redis更加耐久: 你可以使用不同的fsync策略:无fsync,每秒fsync,每次写的时候fsync.使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求),一旦出现故障,你最多丢失1秒的数据.
  • AOF文件是一个只进行追加的日志文件,所以不需要写入seek,即使由于某些原因(磁盘空间已满,写的过程中宕机等等)未执行完整的写入命令,你也也可使用redis-check-aof工具修复这些问题.
  • Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。
  • AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。 导出(export) AOF 文件也非常简单: 举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。

AOF 缺点

  • 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
  • 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。

废话不多说直接看下面的示例吧,通过 Docker 运行一个 redis 实例,并设置一些数据,然后导出 RDB 文件,再运行一个 redis 实例通过 RDB 文件还原数据

备份

通过 docker run -d --name redis-test-1 redis:alpine 命令来创建一个 redis 实例,接着 SET 一个 key 保存到我们的 redis,使用命令 SET hello world 写入测试数据,你也可以写入别的自己想写的数据,接着可以使用 keys * 来验证数据是否写入成功

测试数据写入成功后使用 SAVE 命令来创建 RDB 文件,命令执行成功后我们可以在 /data 目录下看到会有一个 dump.rdb 文件,这就是我们想要的 RDB 文件,通过 docker cp 命令可以把这个文件拷贝到 host 目录下

还原

通过上面 RDB 文件我们可以在 redis 启动的时候还原 RDB 文件中的数据,只需要在 Redis 启动前把 RDB 文件放在 redis 的 data 目录下就可以了。

执行 docker run --rm --name redis-test-2 -v ${pwd}/data:/data redis:alpine

这个命令我是在 powershell 上执行的,如果执行在 linux 上执行需要把 ${pwd} 换成 $(pwd) 来表示当前目录

可以看到上面的日志里有 Loading RDB ... 就是在加载 RDB 文件中的数据

我们再来验证一下 RDB 文件里的数据是否真的加载到了新的 redis 实例中,先来验证一下 data 目录是否正常挂载了,执行 docker exec -it redis-test-2 sh 来进入到 redis 实例容器中,ls 查看 data 目录中的文件看是否有我们期望的 RDB 文件,接着进入 redis-cli 来验证数据是否存在

使用 keys * 来列出来所有的 key 信息,可以看到有我们在上一个 redis 里写入的测试数据了,再来使用 GET hello 来验证数据是否正确,至此我们的数据就还原到新的 redis 实例中了~~

More

当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:

  • Redis 调用forks. 同时拥有父进程和子进程。
  • 子进程将数据集写入到一个临时 RDB 文件中。
  • 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。

这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益。

如果 redis 被访问的比较频繁,可以使用 BGSAVE 代替 SAVE 来异步创建 RDB 备份

如果 redis 不是使用 docker 来使用的,/data 目录可以在 redis-cli 中使用 CONFIG GET dir 来获取保存 rdb 文件的目录,默认保存的 RDB 文件名称是 dump.rdb,如果有修改过,可以通过 CONFIG GET dbfilename 来获取当前使用的文件名

References

https://redis.io/topics/persistence

Http://redis.cn/topics/persistence.html

到此这篇关于Redis 通过 RDB 方式进行数据备份与还原的文章就介绍到这了,更多相关Redis数据备份与还原内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Redis 通过 RDB 方式进行数据备份与还原的方法

本文链接: https://www.lsjlt.com/news/121668.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis 通过 RDB 方式进行数据备份与还原的方法
    目录IntroRedis 持久化RDB的优点RDB的缺点AOF 优点AOF 缺点备份还原Intro 有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文...
    99+
    2022-11-11
  • Redis RDB方式数据如何备份与恢复
    Redis RDB方式数据如何备份与恢复?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Redis数据备份实例127.0.0.1...
    99+
    2022-10-18
  • Redis RDB方式数据备份与恢复的实例
    这篇文章主要介绍了Redis RDB方式数据备份与恢复的实例,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。Redis数据备份实例127.0.0....
    99+
    2022-10-18
  • MySQL数据库的备份与还原操作方法
    目录1、数据库备份2、数据还原1、数据库备份 备份的结果都是SQL指令 mysqldump:专门用于备份SQL的客户端 SQL备份:表结构 + 数据 缺点: 会产生的备份文件特别大不...
    99+
    2022-11-13
  • MySQL数据备份与还原的方法是什么
    本篇内容介绍了“MySQL数据备份与还原的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、数据...
    99+
    2022-10-18
  • 备份和还原MySQL数据库的方法
    备份和还原MySQL数据库的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧! MySQL是一个永久存储数据的数...
    99+
    2022-10-18
  • Redis数据备份与恢复的方法
    Redis数据备份与恢复的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!Redis RDB方式数据备份与恢复Redis...
    99+
    2022-10-18
  • 批量备份还原导入与导出MongoDB数据方式
    前文链接传送门 mongo数据库的安装与配置 Navicat 建立数据库连接 新建数据库 导入JavaScript文件入数据库 mongodb数据备份和还原主要分为二种,一...
    99+
    2022-11-12
  • [ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 1:备份.nb3文件方式)
    本文主要讲解如何用Navicat(Navicat Premium ,或者Navicat for mysql)进行MySQL备份和恢复数据库。 本文主要大纲为:使用Navicat备份工具方式进行备份和还原,其中包括还原自身数据库和还原到其他...
    99+
    2023-08-16
    数据库 mysql 运维开发 sql
  • 还原阿里云备份数据库的方法
    本文将介绍如何在阿里云上进行数据库备份,并详细介绍如何还原备份数据库的方法。无论是因为数据丢失、系统故障还是其他原因,备份数据库是保护数据安全的重要措施之一。通过阿里云提供的备份服务,您可以轻松地进行数据库备份和还原操作,确保数据的完整性和...
    99+
    2023-12-31
    阿里 备份 数据库
  • MYSQL数据库备份和还原的操作方法
    下面讲讲关于MYSQL数据库备份和还原的操作方法,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MYSQL数据库备份和还原的操作方法这篇文章你一定会有所受益。备份数据库:云服务器...
    99+
    2022-10-18
  • sqlserver数据库备份及还原的方法是什么
    SQL Server数据库备份和还原的方法主要有以下几种:1. 使用SQL Server Management Studio (SS...
    99+
    2023-10-18
    sqlserver
  • plsql备份数据库并还原的方法是什么
    在PL/SQL中备份和还原数据库的方法可以通过使用Oracle提供的工具和命令来实现。下面是一个基本的备份和还原数据库的方法:备份数...
    99+
    2023-10-19
    plsql 数据库
  • MySQL命令行方式进行数据备份与恢复
    目录备份还原方式一方式二平时经常管理数据库的时候 发现身边小伙伴儿 都是使用各种图形化工具对mysql数据 进行数据的备份和还原操作 离开了工具就束手无策了 美其名曰 巧妇难为无米之炊 今天就和大家分享一下命令行方式对M...
    99+
    2022-08-18
    MySQL命令行数据备份与恢复 MySQL数据备份 MySQL命令行恢复
  • server通过脚本进行数据库压缩全备份的方法是什么
    server通过脚本进行数据库压缩全备份的方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。问题:生产环境的数据库可能比较大,如果直接进...
    99+
    2022-10-19
  • 备份、还原和迁移MongoDB数据库的方法是什么
    这篇文章主要介绍了备份、还原和迁移MongoDB数据库的方法是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mongodump是mongod...
    99+
    2022-10-18
  • 通过Docker Compose、Nginx和MariaDB实现PHP应用程序的数据备份与还原
    随着云计算和容器化技术的快速发展,越来越多的应用程序选择使用Docker来部署和运行。在Docker生态系统中,Docker Compose是一个非常受欢迎的工具,它可以通过一个单一的配置文件来定义和管理多个容器。本文将介绍如何使用Dock...
    99+
    2023-10-21
    Docker 数据备份 数据还原
  • 阿里云数据库备份还原不了的原因及解决方法
    随着云计算的广泛应用,数据库备份和还原已成为企业数据管理的重要环节。然而,许多用户在使用阿里云数据库进行备份和还原时可能会遇到问题。本文将分析阿里云数据库备份还原不了的原因,并提供相应的解决方法。 一、问题原因分析权限问题:如果用户在执行备...
    99+
    2023-12-13
    阿里 解决方法 备份
  • ACCESS数据库的压缩、备份、还原、下载以及删除数据的实现方法
    本篇内容介绍了“ACCESS数据库的压缩、备份、还原、下载以及删除数据的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细...
    99+
    2022-10-18
  • sqlserver数据库高版本备份还原为低版本的方法是什么
    今天就跟大家聊聊有关sqlserver数据库高版本备份还原为低版本的方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。问题描述:高版本sql备...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作