redis 持久化 基础理解 及 数据迁移基础理解

持久化

就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

Redis 提供了两种持久化方式:RDB(默认) 和AOF 

RDB:

rdb是Redis DataBase缩写

RDB功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数

 

rdbSave函数: 将内存中的数据库数据以 RDB 格式保存到磁盘(文件)中,文件存在,那么新的 RDB 文件将替换已有的 RDB 文件。

在保存 RDB 文件期间, 主进程会被阻塞, 直到保存完成为止。

SAVE 和 BGSAVE 两个命令是操作 rdbSave函数的区别:

SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。

BGSAVE 则 fork 出一个子进程,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。因为 rdbSave 在子进程被调用,所以 Redis 服务器在 BGSAVE 执行期间仍然可以继续处理客户端的请求。

rdbLoad函数:是redis服务重启或者启动的时候回加载保存到磁盘的RDB文件加载到内存中会被阻塞。

存储结构

+-------+-------------+-----------+-----------------+-----+-----------+

| REDIS | RDB-VERSION | SELECT-DB | KEY-VALUE-PAIRS | EOF | CHECK-SUM |

+-------+-------------+-----------+-----------------+-----+-----------+

http://redisbook.readthedocs.io/en/latest/internal/rdb.html#id4

 

保存策略:

save 900 1

save 300 10 #300 秒内容如超过 10 个 key 被修改,则发起快照保存 

save 60 10000

AOF:

Aof是Append-only file缩写

 

每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作

aof写入保存

WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件

SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。

两个步骤都需要根据一定的条件来执行,Redis提供了三种条件。 

 

 

保存策略:

模式

WRITE 是否阻塞?

SAVE 是否阻塞?

停机时丢失的数据量

AOF_FSYNC_NO 

不保存

阻塞

阻塞

操作系统最后一次对 AOF 文件触发 SAVE 操作之后的数据。

AOF_FSYNC_EVERYSEC

每一秒钟保存一次 

阻塞

不阻塞

一般情况下不超过 2 秒钟的数据。

AOF_FSYNC_ALWAYS

每执行一个命令保存一次

阻塞

阻塞

最多只丢失一个命令的数据。

 

存储结构:

  内容是redis通讯协议(RESP )格式的命令文本存储。

 

总结:RDB:数据 .AOF:数据+命令

AOF更新频率RDB高 优先加载aof。

加载的时候没有RDB(数据文件要小)快吧。


数据迁移

数据迁移可以理解为slot(槽)和key的迁移,这个功能很重要,极大地方便了集群做线性扩展,以及实现平滑的扩容或缩容。

 

现在要将Master A节点中编号为1、2、3的slot迁移到Master B节点中,在slot迁移的中间状态下,slot 1、2、3在Master A节点的状态表现为MIGRATING(迁移),在Master B节点的状态表现为IMPORTING(入口)。

 

此时并不刷新node的映射关系

 

IMPORTING状态

被迁移slot 在目标Master B节点中出现的一种状态,准备迁移slot从Mater A到Master B的时候,被迁移slot的状态首先变为IMPORTING状态。

 

键空间迁移

键空间迁移是指当满足了slot迁移前提的情况下,通过相关命令将slot 1、2、3中的键空间从Master A节点转移到Master B节点。此时刷新node的映射关系。

 

复制&高可用:

集群的节点内置了复制和高可用特性。

特点:1、节点自动发现

  1. slave->master 选举,集群容错
  2. Hot resharding:在线分片
  3. 基于配置(nodes-port.conf)的集群管理
  4. 客户端与redis节点直连不需要中间proxy层.
  5. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值