专栏首页LuckQIRedis初识~持久化数据

Redis初识~持久化数据

Redis我们都知道Redis的内容是放在内存当中的,如果我们的安装Redis的服务器宕机了,那么我们在内存保存的内容也就丢失了。在Redis当中给提供了不同级别的持久化的方式来进行数据的保存:
  1. RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
  2. AOF持久化方式记录每次对服务器写的操作。当服务器重启的时候会重启执行这些命令来恢复原始的数据,AOF命令以redis协议追加每次写的操作到文件的末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
  3. 也可以不运行持久化的方式。只是保证服务器存在的情况下运行。
  4. 两种持久化的方式都可以共同存在,在这种情况下,Redis重启的时候会优先载入AOF的文件来恢复原始的数据,通常情况下AOF的文件保存的数据要比RDB的方式保存的数据集要完整。

RDB的优点与缺点

----------------------------------------------

1. 优点

  • RDB是一个非常紧凑的文件,保存某个时间点的数据集,然后根据指定的时间间隔进行存储。
  • RDB是一个紧凑的单一文件,很方便的传导远端数据中心,适合用于灾难恢复。
  • RDB在保存文件时,父进程唯一需要的是fork出一个子进程,接下来的工作全部由子进程来完成。所以RDB的持久化方式可以最大化redis的性能。
  • 与AOF相比,恢复大的数据集的时候RDB的方式会更快一些。

2. 缺点

  • Redis 如果发生宕机的时候,我们的RDB快照还没有进行数据备份,那么容易把在定时前存储的内容全部丢失。
  • RDB需要fork自己成来保存数据到硬盘中,当当数据级比较大的时候fork进程就比较耗时,会导致Redis在毫秒级内不能响应客户端的请求。AOF也需要fork但是可以调节重写日志的频率来提高数据的耐久度。

AOF优点和缺点

1. 优点

  • 使用AOF会让你的Redis更加耐久。并且我们可以使用不同的策略fsync。每秒,每次写的时候策略。Redis的性能还是依然很好。一旦出现故障丢失的就是一秒的数据而已。
  • AOF文件是一个只进行追加的日志文件,所以不需要写入seek,及时由于某些原因导致未执行完整的执行命令,我们也可以使用redis-check-aof 工具来修复 这些问题。
  • Redis 可以使在AOF文件变得过大的时候,会自动的在后台对AOF进行重写,重写后的新的AOF文件包含了恢复当前数据集所需的最小命令集合。整个重写操作是就对安全的。即使在重写的时候,服务器发生了宕机,现有的AOF文件也不丢失。一旦新文件创建完成。Redis就会切换到新文件中并开始对新的AOF文件进行追加操作。
  • AOF文件有序的保存了对数据库执行的所有写入操作。这些写入操作以Redis协议的格式保存。因此AOF文件也可以被人容易读懂,对文件进行分析也是很轻松。

2. 缺点

  • AOF的体积要是RDB文件的体积大。
  • 根据需要的fsync策略 AOF的速度可能会慢于RDB。一般情况下fsync的性能依然非常高,而关闭fsync 可以让AOF的速度和RDB一样快。即使在巨大的写入负载时,RDB可以提供更有保证的最大延迟时间。

3.选择合适的快照

  • 如果我们能接受几分钟的数据丢失,那么RDB持久化的方式是挺合适的。
  • AOF的方式能帮助我们快速的保存数据。

快照

1. RDB快照保存

默认情况下,Redis 将数据库快照片保存在dump.rdb的二进制文件中,我们在Redis进行设置。 save 60 1000 满足条件就是 60秒内至少有1000 个键被改动。 这种方式被称为 快照snapshotting.

工作方式

上面所说保存 保存到我二进制文件中,服务器需要执行以下的操作才可以实现。

  • Redis调用forks ,同时拥有父进程和子进程。
  • 子进程将数据集写入到一个临时的RDB文件中。
  • 当子进程完成对新的RDB文件的写入时,新文件替换旧文件,并删除旧的RDB文件。
  • 这种方式帮助Redis 可以从 写时复制机制中获益。

2. 追加方式的AOF

  • AOF的快照方式是在文件后面直接追加命令。 我们只需要在配置文件中打开 appendonly yes .但是随着时间的推移,AOF文件会越来越大,那么AOF文件就可以开始进行重建,执行BGREWRUTEAOF命令。 Redis 将会生成一个新的AOF文件。
  • 如果文件有所损坏,我们也可以使用命令来进行恢复redis-check-aof –fix

工作方式

  • 两者都利用了写是复制的机制。
  • Redis开始执行fork();同事拥有父进程和子进程。
  • 子进程开始将新的AOF文件内容写入到临时文件中。
  • 对于所写的父进程是两边操作,一边写入到内存换从中,一边将这些数据追加到AOF文件中。
  • 子进程完成工作后给父进程发送一个信号,父进程接收到信号后,内存数据追加到新的AOF文件中。
  • 最后新文件替换旧文件。然后命令追加到新文件中。

持久化的目的就是我们防止服务器出现问题的时候,数据不会出现问题,但是我们也需要为这些快照也进行备份,防止数据丢失。

本文分享自微信公众号 - LuckQI(YoungRUIQ),作者:super~琪琪

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux学习桌面系统生成快捷方式与普通用户权限

    说了这么多其实还是建议如果有环境的话,程序员还是在Linux环境下开发的好。虽然刚开始有点难,但是后面会发现有很多好处。那么我们在Linux系统下开发首先会遇到...

    用户2196435
  • 愿自己活成自己喜欢的样子

    三十而立的姑娘,虽没有经历过太多的波涛海浪,却也经历过几次的悲欢离合; 每次的完美邂逅,从无话不说到无话可说,似乎也没有那么漫长。 遇到你之前,我一个人睡觉,一...

    用户2196435
  • Java核心技术讲解学习四

    用户2196435
  • 深入理解Redis持久化Redis 持久化

    本文翻译自官方文档 http://redis.io/topics/persistence 。

    desperate633
  • 【玩转Redis面试第3讲】一次性将Redis RDB持久化和AOF持久化讲透

    持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁...

    爱笑的架构师
  • Redis持久化(Persistence):了解如何配置redis的持久化。

    在默认情况下, Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改...

    须臾之余
  • Redis持久化

    Redis为了保证运行的安全性,防止因进程退出或者其它系统原因导致的数据丢失问题,于是提供了持久化技术。在Reids中我们可以使用RDB和AOF两种机制来使用R...

    吉林乌拉
  • Redis持久化的原理及优化

    Redis提供了将数据定期自动持久化至硬盘的能力,包括RDB和AOF两种方案,两种方案分别有其长处和短板,可以配合起来同时运行,确保数据的稳定性。

    全菜工程师小辉
  • Redis持久化机制详解

    张申傲
  • Redis持久化

    Redis是内存型数据库,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。 Redis支持两种持久化的方式,一...

    武培轩

扫码关注云+社区

领取腾讯云代金券