鍍金池/ 問(wèn)答/Java  PHP  GO/ memcached并發(fā)問(wèn)題

memcached并發(fā)問(wèn)題

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

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

以上代碼,為什么會(huì)重復(fù)insert數(shù)據(jù)??正確的寫法是怎么樣的呢?

回答
編輯回答
我以為

MC也不是持久化,只能做第一層攔截,防止重復(fù)還是依靠數(shù)據(jù)庫(kù)唯一索引

2017年9月12日 20:12
編輯回答
莓森

你個(gè)代碼邏輯明顯有問(wèn)題啊
$ret && $this->insert($data);

ret 為空的時(shí)候才進(jìn)行插入操作把

2018年1月7日 15:36
編輯回答
悶騷型

如果并發(fā)多的情況下,可以考慮使用鎖,而且你的邏輯里面 $ret && $this->insert($data); 沒(méi)做嚴(yán)謹(jǐn)?shù)呐袛?,也即并發(fā)的時(shí)候,只要 $ret實(shí)現(xiàn)了,也就會(huì)造成 $this->insert的重復(fù)插入,并同時(shí)在結(jié)合數(shù)據(jù)庫(kù)的unique索引進(jìn)行限制重復(fù)值

2017年5月31日 23:00
編輯回答
擱淺

有人知道怎么解決嗎?在線等!目前有以下異常數(shù)據(jù)

clipboard.png

clipboard.png

2018年2月25日 05:34
編輯回答
離人歸

用mem的鎖來(lái)解決這個(gè)問(wèn)題

2018年8月21日 21:10