首页 数据库 Redis redis怎么实现数据同步

redis怎么实现数据同步

Nov 20, 2019 pm 01:27 PM
redis

redis怎么实现数据同步

Redis的主从同步机制可以确保redis的master和slave之间的数据同步。

同步方式包括:全量复制和增量复制                             (推荐学习:Redis视频教程

全量拷贝

nginx-29.png

slave第一次启动时,连接Master,发送PSYNC命令,格式为psync {runId} {offset}

{runId} 为master的运行id;{offset}为slave自己的复制偏移量。
slave第一次连接master时,slave并不知道master的runId,也不知道自己偏移量,这时候slave会传一个问号和-1,告诉master节点是第一次同步。格式为psync ? -1
登录后复制

当master接收到psync ? -1时,知道slave是要全量复制,就会将自己的runId和offset告知slave,回复命令fullresync {runId} {offset}。同时,master会执行bgsave命令来生成rdb文件,期间的所有写命令将被写入缓冲区。

slave接受到master的回复命令后,会保存master的runId和offset,slave此时处于同步状态。
slave处于同步状态,如果此时收到请求,当配置参数slave-server-stale-data yes时,会响应当前请求;slave-server-stale-data no,返回错误。
登录后复制

master bgsave执行完毕,向slave发送rdb文件。rdb文件发送完毕后,开始向slave发送缓冲区中的写命令。

slave收到rdb文件,丢弃所有旧数据,开始载入rdb文件。

rdb文件同步结束之后,slave执行从master缓冲区发送过来的所以写命令。

此后 master 每执行一个写命令,就向slave发送相同的写命令。

增量拷贝

如果出现网络闪断或者命令丢失等异常情况时,当主从连接恢复后,由于从节点之前保存了自身已复制的偏移量和主节点的运行ID。因此会把它们当作psync参数发送给主节点,要求进行部分复制操作,格式为psync {runId} {offset}。

主节点接到psync命令后首先核对参数runId是否与自身一致,如果一致,说明之前复制的是当前主节点;之后根据参数offset在自身复制积压缓冲区查找,如果偏移量之后的数据存在缓冲区中,则对从节点发送+continue响应,表示可以进行部分复制;否则进行全量复制。

主节点根据偏移量把复制积压缓冲区里的数据发送给从节点,保证主从复制进入正常状态。

以上是redis怎么实现数据同步的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Redis内存使用率过高怎么办? Redis内存使用率过高怎么办? Apr 10, 2025 pm 02:21 PM

Redis内存飙升的原因包括:数据量过大、数据结构选择不当、配置问题(如maxmemory设置过小)、内存泄漏。解决方法有:删除过期数据、使用压缩技术、选择合适的结构、调整配置参数、检查代码是否存在内存泄漏、定期监控内存使用情况。

Redis内存碎片如何处理? Redis内存碎片如何处理? Apr 10, 2025 pm 02:24 PM

Redis内存碎片是指分配的内存中存在无法再分配的小块空闲区域。应对策略包括:重启Redis:彻底清空内存,但会中断服务。优化数据结构:使用更适合Redis的结构,减少内存分配和释放次数。调整配置参数:使用策略淘汰最近最少使用的键值对。使用持久化机制:定期备份数据,重启Redis清理碎片。监控内存使用情况:及时发现问题并采取措施。

Redis使用指定配置文件重启 Redis使用指定配置文件重启 Apr 10, 2025 pm 02:42 PM

通过指定配置文件重启Redis:1. 找到配置文件(通常位于conf子目录中的redis.conf);2. 修改所需配置(如更改端口);3. 使用redis-server /path/to/redis.conf命令通过配置文件重启Redis(其中/path/to/redis.conf为修改后配置文件的路径);4. 使用redis-cli验证是否已成功重启。

redis重启数据还在吗 redis重启数据还在吗 Apr 10, 2025 pm 02:45 PM

Redis 重启后数据仍然存在。Redis 将数据存储在内存中,重启不会删除内存数据。Redis 还提供持久化功能,通过 RDB 或 AOF 文件将数据保存到硬盘,确保重启后数据可从持久化文件中恢复。

Redis持久化对内存的影响是什么? Redis持久化对内存的影响是什么? Apr 10, 2025 pm 02:15 PM

Redis持久化会额外占用内存,RDB在生成快照时临时增加内存占用,AOF在追加日志时持续占用内存。影响因素包括数据量、持久化策略和Redis配置。要减轻影响,可合理配置RDB快照策略、优化AOF配置、升级硬件和监控内存使用情况。此外,在性能和数据安全之间寻求平衡至关重要。

如何根据业务需求设置Redis内存大小? 如何根据业务需求设置Redis内存大小? Apr 10, 2025 pm 02:18 PM

Redis 内存大小设置需要考虑以下因素:数据量及增长趋势:估算存储数据的大小和增长率。数据类型:不同类型(如列表、哈希)占用内存不同。缓存策略:全缓存、部分缓存和淘汰策略会影响内存使用。业务峰值:预留足够内存应对流量高峰。

Redis重启服务在哪 Redis重启服务在哪 Apr 10, 2025 pm 02:36 PM

不同操作系统中重启 Redis 服务的方法:Linux/macOS:使用 systemctl 命令(systemctl restart redis-server)或 service 命令(service redis-server restart)。Windows:使用 services.msc 工具(在运行对话框中输入 "services.msc" 并按 Enter)并右键单击 "Redis" 服务,选择 "Restart"。

Redis重启命令是什么 Redis重启命令是什么 Apr 10, 2025 pm 02:39 PM

Redis重启命令为redis-server。此命令用于加载配置文件,创建数据结构,启动Redis服务器并侦听客户端连接。用户可以在终端中执行"redis-server [选项]"命令重新启动Redis服务器,常用选项包括后台运行、指定配置文件路径、指定监听端口、仅在数据丢失时重新加载快照等。注意,重新启动服务器会断开所有客户端连接,请务必在重启前保存必要数据。

See all articles