开发者社区> 问答> 正文

一个关于mysql的故障

记录移动设备id在移动开发中应该是很常见的操作,一般的流程是:移动设备在应用商店中下载app后打开,这时客户端程序会将获取设备信息并提交到服务器端接口入库。但是由于XX原因我们需要在这之前再加一个同样的请求,也就是在这之前有可能已经写入数据库了,但是还要再走一遍相同的逻辑。当我写好程序交由客户端同学去测试的时候,不可思议的事情发生了:有大概20%的概率会报错“Duplicate entry XXX”(此处省去30字),然后客户端同学还反映说如果两个请求间隔1秒钟就没问题。

展开
收起
蛮大人123 2016-02-11 11:23:49 2168 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    首先判断设备id是否存在,不存在则写入。结合之前的反馈我断定:第一次写入成功且第二次判断时为空的时候,再写入的时候数据库里已经有数据了。运维同学说服务器mysql是读写分离的,也就是说出现这种问题的原因是:第一次访问服务器时如果设备id不存在(slave)则写入master,这时master开始向slave同步,第二次访问服务器时如果之前的同步完成了则不会二次写入,如果同步没有完成则会第二次写入master,这时就会报错。
    解决
    1.既然客户端同学说延迟1秒就ok了淡然可以这样干,但是这个时间其实和同步时间相关的,不一定是这个数字,有一定的风险,所以不建议采纳,但是救急是可以的。
    2.我的方案是:第一次写入的时候将当前的设备id保存在memcache中,第二次访问的时候直接判定memcache中是否存在,保存时间的话,设置个10秒钟基本就够了。

    2019-07-17 18:40:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像