redis 学习 - 数据复制

本篇已收录至redis in action 学习笔记系列

redis 支持数据文件的复制, 是因为 redis server 也需要部署很多个用于分担负载压力. 尽管 redis 的性能很好, 也有某些请求在处理上会比较耗时, 当某个请求需要耗费 10ms 处理时, 1秒内 redis 单实例能够处理的请求就只有100个请求命令.

sunionstore 命令的性能. 在主频为 2.4 GHz 的英特尔酷睿2处理器上, 对两个分别包含 10000 条元素的集合执行 sunionstore 命令生成一个 20000条元素的集合结果, 通常要耗费 7,8ms

如何复制 redis 的数据

配置一个从服务器连接主服务器

在启动 redis server 指定的 conf 时, 修改里面的 slaveof host port, 就可以将启动的 server 连接到已经启动的另一个 server 上. 也可以在当前 server 启动以后, 发出 slaveof host port 命令, 指定连接一个server. 或者 slaveof no one 关闭连接.

redis server 之间复制数据的完整过程

步骤 主服务器 从服务器
1 等待命令接入 连接主server
2 开始执行 bgsave, 并使用缓冲区记录之后的写入命令 根据配置选项来决定是否使用现有的数据来应答客户端的请求, 或者返回错误结果.
3 bgsave 执行完毕, 向从服务器发送文件, 并在发送期间继续使用缓冲区记录写入命令 丢弃原有的旧数据, 载入主server发送来的数据.
4 快照文件发送完毕, 开始向从服务器发送缓冲区的写入命令 完成快照数据的载入操作, 开始接收命令
5 完成缓冲区的命令传送, 从现在开始, master每次写入一条数据, 就向slave发送一条写入命令 完成master发送的缓冲区写入命令, 从现在开始, 接收并执行每个master传来的写入命令

一些坑

redis不支持master-master的复制机制

尽量避免多个slave不同时间的连接master, 会导致master不断地执行bgsave, 影响系统性能, 所以当数据是一样的时候, 后续的slave可以将已经连上master的slave作为数据源, 从而形成 master-slave-slave

通过主从服务器以及aof模式保护数据

可以将每个slave的aof模式都开启, 并且设置成 everysec 级别. 这样就能够在多台server上保存完整的数据备份.

posted @ 2020-03-25 23:08  YanyuWu  阅读(569)  评论(0编辑  收藏  举报