原标题:手撕Redis,主从同步

一、主从同步的工作原理

redis主从复制过程: 当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。master同步数据时是非阻塞式的,可以接收用户的读写请求。然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。Java架构社区

可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

slave连接到master

slave发送SYNC命令

master服务器备份数据库到.rdb文件

master服务器把.rdb文件传输给slave服务器

slave服务器把.rdb文件数据导入到数据库

上面的这5步是同步的第一阶段,接下来在master服务器上调用每个命令都在使用replicationFeedSlaves()来同步到slave服务器。Java架构社区

二、配置主从同步

1.新建文件夹master-slave,在master-slave中新建master和slave,将redis.conf到master和slave文件夹中。

2.修改master和slave的配置文件:端口号、进程文件和日志文件的位置。

3.修改slave的配置文件:

4.分别进入到master和slave文件夹,启动 redis服务:redis-server redis.conf

5.客户端连接

连接master:redis-cli -h 192.168.99.207 -p 6379

查看master的信息,输入 info,看到角色是master

连接slave:redis-cli -h 192.168.99.207 -p 6380

查看slave的信息,输入info,看到的角色是slave,且

master_link_status:up

master_repl_offset 和 slave_repl_offset相等

master_last_io_seconds_ago 在 10 秒内,则说明配置成功

6.测试

在master中添加数据:set name xbq

在slave中查询数据:get name,结果和在master中插入的数据一样。

测试下 在slave中添加数据:set address shenzheng,发现报错,(error) READONLY You can't write against a read only slave.

这是因为 我们设置了 slave为只读,不可以操作写。

三、主从同步的应用

1.用于对 数据的热备份

2.用于读写分离

粉丝福利

加Java架构社区: 领取以上资料,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的资料返回搜狐,查看更多

责任编辑:

redis mysql主从同步_手撕Redis,主从同步相关推荐

  1. 分布式锁 哨兵模式_手撕redis分布式锁,隔壁张小帅都看懂了!

    前言 上一篇老猫和小伙伴们分享了为什么要使用分布式锁以及分布式锁的实现思路原理,目前我们主要采用第三方的组件作为分布式锁的工具.上一篇运用了Mysql中的select -for update实现了分布 ...

  2. redis setnx 分布式锁_手写Redis分布式锁

    分布式锁使用场景 现在的系统都是集群部署,每个服务都不是单节点的了.比如库存服务,可能部署到3台机器上分别命名为节点1,节点2,节点3.库存服务需要扣减库存,扣减库存肯定需要锁吧,如果使用Lock或者 ...

  3. redis 启动无输出_深入剖析Redis系列: Redis入门简介与主从搭建

    前言 Redis 是一种基于 键值对 的 NoSQL 数据库.与很多键值对数据库不同,Redis 提供了丰富的 值数据存储结构,包括 string(字符串).hash(哈希).list(列表).set ...

  4. redis mysql 原子计数器_使用redis的increment()方法实现计数器功能案例

    一直知道redis可以用来实现计数器功能,但是之前没有实际使用过,昨天碰到一个需求:用户扫码当天达到20次即提示:当日扫码次数达到上限! 当时就想到使用redis的递增方法increment()来实现 ...

  5. redis mysql排行榜实现_使用Redis实现实时排行榜

    游戏中存在各种各样的排行榜,比如玩家的等级排名.分数排名等.玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标. 一个典型的游戏排行榜包 ...

  6. redis key命名规范_公司内部 Redis 使用规范

    前言 在业务中,会经常使用 Redis 作为后端缓存.存储.如果结构规划不合理.命令使用不规范,会造成系统性能达到瓶颈.活动高峰系统可用性下降,也会增大运维难度.为了避免出现因 Redis 使用不当, ...

  7. redis指定配置文件启动_深入学习 Redis 集群搭建方案及实现原理

    " 在前面的文章中已经介绍了 本文将详细介绍集群,主要内容包括: 集群的作用 集群的搭建方法及设计方案 集群的基本原理 客户端访问集群的方法 实践须知(集群伸缩.故障转移.参数优化等) 集群 ...

  8. mysql nosql 同步_使用canal和canal_mysql_nosql_sync同步mysql数据

    场景: 有两个独立的项目A和B,都使用mysql做数据库, 其中项目A中有一个表存储新闻资讯,字段有新闻id,标题title,类型type,内容data. 后来项目B也需要这个表的数据,但项目B用了两 ...

  9. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门

    目录 Redis 集群搭建Redis 是啥集群(Cluster)Redis Cluster 说明Redis Cluster 节点Redis Cluster 集群模式不能保证一致性创建和使用 Redis ...

最新文章

  1. python实训总结报告书_20172304 实验四python综合实践报告
  2. JavaScript 字符串连接性能比较
  3. php gd库 图片水印,php使用GD库实现文字图片水印及缩略图教程
  4. axios create拦截_Vue学习-axios
  5. 聊聊高并发(三十三)Java内存模型那些事(一)从一致性(Consistency)的角度理解Java内存模型
  6. shrio的rememberMe不起作用
  7. Gcc 完全参考手册,参数说明,操作指南-Gcc Complete referene
  8. 分享Java 中如何运行字符串表达式?
  9. 核心交换机的TRUNK配置详细讲解
  10. 线程锁并不是想象的那样可靠
  11. Linux如何实现自动文件同步?
  12. php iconv translit,php iconv translit for removing accents: not working as excepted?
  13. 安卓动画入门教程 Animation in Android(1)
  14. 保密基本知识试题(2017年版)(共281题)
  15. 从零学物联网技术:较大影响了我们生活的物联网技术应用有哪些?
  16. 量子计算实现:量子算法的实现
  17. 「GoTeam 招聘时间」ANKER Golang 开发工程师(深圳)
  18. tapestry3常见问题
  19. 计算机四级网络工程师
  20. 感觉生活一直在退步~

热门文章

  1. 使用fontTools库
  2. 只此一招,全屏操作从此易如反掌
  3. 软件开发和产品经理到底是怎么回事
  4. [Eclipse] - Eclipse空格替换tab
  5. 使用XML与远程服务器进行交互
  6. Oracle Goldengate OGG 11g与各操作系统及数据库版本的兼容列表
  7. py2数据分析_利用数据
  8. 防止接口数据出问题,前端假数据调试
  9. C++ string流
  10. (字符串的处理4.7.22)POJ 3337 Expression Evaluator(解析C风格的字符串)