MySQL 主从同步遇到的问题及解决方案

  在做某个项目的时候,使用主从数据库,master负责update、delete、insert操作,而slave负责select操作。

情景1:发表文章与查看文章

  可以认为这个项目是一个博客系统,这里就以用户发表文章与查看发表的文章为例:

  1、用户发表文章,文章是存到master库中的,insert into Master values (id, content);

  2、发表文章之后,立马跳转到刚才发表的文章阅读,此时的文章是从slave中获取的。select * from slave;

  这个时候,就出现问题了,因为如果网络出现拥堵,或者其他原因,一般情况下,第二个操作都是访问不了刚才发表的文章的。

  小技巧:让用户发表文章后,不立马查看文章,比如跳转到其他页面,给主从同步一点时间

 

情景2:注册之后立马登陆

  上面那种想法属于逃避行为,虽然可以解决不能查看文章的问题,但是如果另外一个场景,就有点不适用了,比如:

  1、用户进行了注册,此时数据写到master中。

  2、用户立马进行登录,此时读的是slave。

  这时候,如果用户的速度稍微快一点,那么是不是用户就不能登陆了呢?毕竟数据没有同步到slave,即使用户的用户名和密码都正确,那也是不能登陆的呀。

  小技巧:用户进行注册时,如果注册成功,那么就将用户名和密码保存到JavaScript的全局变量或者cookie中,登陆的时候,将输入的用户名和密码和全局变量或者cookie中的用户名进行对比即可。

 

收尾

  上面这个想法虽然可行,但是并不安全,即使将账户和密码都加密存在本地,那也是存在安全隐患的。

 

解决方案

  前面两个问题都可以使用缓存来解决,比如常用的memcache或者redis。

  以发表文章与查看文章为例:

  1、用户发表文章,将数据插入到master,并且将数据添加到memcache或者redis中。

  2、用户查看文章的时候,首先从memcache或者redis中读数据,如果redis中不存在时,再读slave。

  这里可以根据自己的情况选择来决定是先读缓存还是先读slave,如果你的逻辑是发表之后立马查看,那就先读缓存。

  

 

转载于:https://www.cnblogs.com/-beyond/p/9333125.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值