【愚公系列】2022年05月 .NET架构班 051-分布式中间件 Redis存储原理之持久化存储

举报
愚公搬代码 发表于 2022/05/02 19:58:59 2022/05/02
【摘要】 前言Redis是基于内存的,一旦Redis服务器宕机,内存中的数据会全部丢失。如果从后端数据库中来恢复Redis内存会产生以下问题:会给数据库带来巨大的压力。从数据库拉取数据性能较低会导致应用程序响应变慢。Redis存储数据可能是临时性的。因此,Redis的数据持久化很重要,而且不能从后端数据库中恢复。 一、Redis存储原理之持久化存储Redis的持久化存储主要有如下三个方式:RDB方式...

前言

Redis是基于内存的,一旦Redis服务器宕机,内存中的数据会全部丢失。

如果从后端数据库中来恢复Redis内存会产生以下问题:

  • 会给数据库带来巨大的压力。
  • 从数据库拉取数据性能较低会导致应用程序响应变慢。
  • Redis存储数据可能是临时性的。

因此,Redis的数据持久化很重要,而且不能从后端数据库中恢复。

一、Redis存储原理之持久化存储

Redis的持久化存储主要有如下三个方式:

  • RDB方式
  • AOF方式
  • AOF+RDB混合

1.RDB方式

RDB(Redis DataBase)内存快照是Redis提供的持久化机制,它既能避免数据丢失,又能更快地恢复数据。

所谓内存快照,就是指内存中的数据在某一个时刻的状态记录,它类似于照片。在Redis中,这些照片是就后缀为RDB的文件。

使用方式:

只需要将rdb启动目录就可以了,redis启动的时候会自动检查dump.rdb恢复其中的数据。

1.1 优点

  • 适合大规模的数据恢复
  • 对数据的完整性要求不高

1.2 缺点

  • 需要一定的时间间隔进程操作,如果redis意外宕机了,最后一次修改的数据就没有了
  • fork进程的时候,会占用一定的内容空间

2.AOF方式

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

使用方式:

手动触发:执行bgrewriteaof命令直接触发AOF重写。
自动触发:在redis.config配置文件中有两个配置项
auto-aof-rewrite-min-size 64MB(当AOF文件小于64MB的时候不进行AOF重写)
auto-aof-rewrite-min-percenrage 100(当前AOF文件比上次AOF重写后的文件大100%的时候进行AOF重写)

2.1 优点

  • 每一次修改都同步,文件的完整性会更好
  • 每秒同步一次,可能会丢失一秒的数据
  • 从不同步,效率最高的

2.1 缺点

  • 相对于数据文件来说,aof远远大于rdb,修复的速度也比rdb慢
  • aof运行效率也要比rdb慢

3.AOF+RDB混合

问题:使用RDB持久化会有数据丢失的风险,但是恢复速度快,而使用AOF持久化可以保证数据完整性,但恢复数据的时候会很慢。

使用方式:

#配置
aof-use-rdb-preamble yes

3.1 优点

AOF+RDB混合:先使用RDB进行快照存储,然后使用AOF持久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB何AOF两部分恢复数据,即保证了数据完整性,又提高了恢复的性能。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。