redis如何实现数据同步
redis如何实现数据同步
两种,1全同步,2部分同步
全备份:
在slave启动时会向master发送sync消息,master收到slave这条消息之后,将启动后台备份进程,备份完成之后,将备份数据发送给slave
全备份机制
1.slave向master发送SYNC指令,master接收到该指令,调用syncCommand()函数进行处理
2.在syncCommand函数中,启动一个备份进程用于数据同步,如果已有备份进程,就不再重新启动
3.备份进程将执行rdbSave(),完成将redis全部数据保存为rdb文件
4.在redis时间事件函数serverCron中,校验备份进程是否检查完毕,如果备份完成,则调用backgroundSaveDoneHandler完成后续操作
5.在backgroundSaveDoneHandler中更新master各种状态,如备份成功或失败,备份时间等,然后调用updateSlavesWaitingBgsave,将备份的rdb数据发送给等待的slave
6.在updateSlavesWaitingBgsave中遍历所有等待同步的slave,将rdb文件发送给每一个slave,并不是立即发送数据给slave,而是等slave注册写事件及响应函数sendBulkToSlave,当slave对应的socket能够发送数据时就调用sendBulkToSlave
7.sendBulkToSlave将备份文件发送给slave
数据修改操作同步
首次启动全同步,运行过程中进行更新操作(包括写、删除、更改操作)的同步,选一个单独的slave进行数据备份操作
修改操作机制
1.master接收到用户操作,将调用call函数执行的具体操作函数,在call中先通过proc执行函数操作,然后判断该操作是否需要扩散到各slave,如果需要则调用函数propagate()来执行
2.propagate函数将操作指令记录到aof中并扩散到slave,在propagate中调用feedAppendOnlyFile将操作指令记录到aof中,并通过replicationFeedSlaves将操作扩散到各个slave中
3.feedAppendOnlyFile主要将操作保存到aof中,在该函数中将操作转换为redis内部协议格式,并以字符串的形式存储,追加到aof中
4.replicationFeedSlaves将操作扩散到每一个slave中,首先遍历每一个slave,对每个slave执行以下操作,将slave切换到本操作对应的数据库(根据数据库id和当前数据id判断),写入切换数据库的命令时将调用addReply;将命令和参数按照redis协议格式写入到slave响应缓存中.写入命令和参数时将调用addReplyMultiBulkLen和addReplyBulk,这两个函数最终也将调用addReply
5.在函数addReply中将调用prepareClientToWrite,设置slave的socket写入事件处理函数sendReplyClient(通过aeCreateFileEvent设置),这样一旦slave对应的socket有空间写入数据,就调用sendReplyClient进行处理
6.sendReplyClient主要功能是将slave中药发送的数据通过socket发出去
redis如何实现数据同步的更多相关文章
- redis 学习笔记——数据同步、事务
redis主从同步 redis支持简单易用的主从复制(master-slave replication)功能,该功能也是redis高可用性实现的基础. redis复制原理 re ...
- redis与DB数据同步问题
Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Pyt ...
- Redis单节点数据同步到Redis集群
一:Redis集群环境准备 1:需要先安装好Redis集群环境并配置好集群 192.168.0.113 7001-7003 192.168.0.162 7004-7006 2:检查redis集群 [r ...
- Redis和MySQL数据同步及Redis使用场景
1.同步MySQL数据到Redis (1) 在redis数据库设置缓存时间,当该条数据缓存时间过期之后自动释放,去数据库进行重新查询,但这样的话,我们放在缓存中的数据对数据的一致性要求不是很高才能放入 ...
- redis秒杀系统数据同步(保证不多卖)
东西不多卖 秒杀系统需要保证东西不多卖,关键是在多个客户端对库存进行减操作时,必须加锁.Redis中的Watch刚好可以实现一点.首先我们需要获取当前库存,只有库存中的食物小于购物车的数目才能对库存进 ...
- Redis和数据库 数据同步问题
Redis和数据库同步问题 缓存充当数据库 比如说Session这种访问非常频繁的数据,就适合采用这种方案:当然了,既然没有涉及到数据库,那么也就不会存在一致性问题: 缓存充当数据库热点缓存 读操作 ...
- redis竞汰数据同步问题解决
Redis 面试的时候遇到过问Redis是如何解决“竞态条件”的,相关知识点总结一下. 乐观锁 所谓竞态条件,举个例子,一个代表点击数的数值hitcount,每个客户点击一次则+1. 没有事务的时候, ...
- Redis与Mysql数据同步
后台定时任务,定时刷新Redis中信息到数据库.(即Job:定时任务)
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...
随机推荐
- shiro之第一个程序认证
有关shiro的介绍请访问https://blog.csdn.net/Kevinnsm/article/details/111823268 三个核心组件:Subject, SecurityManage ...
- LC-54
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2 ...
- 集成JUnit测试
集成JUnit测试 既然使用了Spring,那么怎么集成到JUnit中进行测试呢,首先大家能够想到的肯定是: public class TestMain { @Test public void tes ...
- 小白文-Git-版本控制
推荐阅读 Git学习-图文并茂还有游戏玩! Git版本控制 注意:开始学习之前,确保自己的网络可以畅通的连接Github:https://github.com,这个是一个国外网站,连起来特别卡,至于用 ...
- SMBIOS- DMTF组织指定的规范
SMBIOS(System Management BIOS , SMBIOS) 是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范 SMBIOS是由行业指导机构Desktop Manage ...
- Java学习day33
线程池: 背景:经常创建和销毁.使用量特别大的资源,比如并发情况下的线程,对性能影响很大 思路:提前创建好多个线程.实现重复利用. 好处:提高响应速度,减少了创建新线程的时间:降低资源消耗,重复利用线 ...
- 【面试普通人VS高手系列】lock和synchronized区别
今天来分享一道阿里一面的面试题,"lock和synchronized的区别". 对于这个问题,看看普通人和高手的回答! 普通人: 嗯,lock是J.U.C包里面提供的锁,synch ...
- JavaScript学习③
3. 属性: PI 6. Number 7. String 8. RegExp:正则表达式对象 1. 正则表达式:定义字符串的组成规则. 1. 单个字符:[] 如: [a] [ab] [a-zA-Z0 ...
- 聊聊如何在华为云IoT平台进行产品开发
摘要:华为云物联网平台承载着南北向数据互通的功能职责. 本文分享自华为云社区<如何基于华为云IoT物联网平台进行产品开发>,作者: Super.雯 . 华为云物联网平台承载着南北向数据互通 ...
- 论文解读(Debiased)《Debiased Contrastive Learning》
论文信息 论文标题:Debiased Contrastive Learning论文作者:Ching-Yao Chuang, Joshua Robinson, Lin Yen-Chen, Antonio ...

