memcached并发问题

$m = new Memcached();
$res = $m->get('key');

if(empty($res)) {
    $ret = $m->set('key');
    $ret && $this->insert($data);
}

以上代码,为什么会重复insert数据??正确的写法是怎么样的呢?

阅读 2.7k
5 个回答

有人知道怎么解决吗?在线等!目前有以下异常数据

clipboard.png

clipboard.png

用mem的锁来解决这个问题

你个代码逻辑明显有问题啊
$ret && $this->insert($data);

ret 为空的时候才进行插入操作把

MC也不是持久化,只能做第一层拦截,防止重复还是依靠数据库唯一索引

如果并发多的情况下,可以考虑使用锁,而且你的逻辑里面 $ret && $this->insert($data); 没做严谨的判断,也即并发的时候,只要 $ret实现了,也就会造成 $this->insert的重复插入,并同时在结合数据库的unique索引进行限制重复值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题