PHP和分布式Memcache的遇到数据不一致问题

这几天做某个产品的时候遇到一个小问题,现象比较诡异

产品用了两台分布式的memcached服务器

某一个计数器取回来的数偶尔会不对,最后定位在php memcache client的failover机制上面。

我们知道,在memcached分布式环境下,某一个key是通过hash计算,分配到某一个memcached上面的

如果php.ini里面 memcache.allow_failover = 1的时候,在分布式环境下,某一台memcached出问题的话,会自动到其他的memcached尝试

就会出现上面的问题,原因如下:

这个key是hash到服务器A的,但是服务器A正好一瞬间连不上(网络或者其他问题),PHP就会去另一台服务器B去尝试。

经过很偶然发生的网络问题和很多次increment操作,有可能两台服务器上面都有这个key,而且值不一样……

get的时候有可能取到不同的值

如果对数据一致性要求很严格的话,可以关掉这个参数 memcache.allow_failover = 0,

或者在php 代码里设置ini_set('memcache.allow_failover', 0); 嗯,问题解决

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值