我知道redis的單個(gè)操作是原子性的,如果在代碼中對(duì)redis進(jìn)行多次操作將無(wú)法保證整個(gè)操作流程的原子性。比如下面的這段代碼中,假設(shè)nums這個(gè)key的值是50,使用ab.exe工具對(duì)其1000次訪問(wèn),并發(fā)數(shù)是100,理論上結(jié)果應(yīng)該會(huì)出現(xiàn)負(fù)數(shù)的.可是我多次測(cè)試下nums的值都是1,請(qǐng)問(wèn)是我測(cè)試的方式不對(duì)還是其他哪里有問(wèn)題呢?$nums = $redis->get('nums');if($nums > 1)
$redis->decr('nums');
2 回答

瀟湘沐
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
你寫(xiě)了判斷呀,大于1的時(shí)候才遞減1
你減到1的時(shí)候都不執(zhí)行了,他怎么能作為測(cè)試原子性的依據(jù)呢?

Helenr
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
你這樣的并發(fā)很難測(cè)試出來(lái)的,的確這樣操作存在負(fù)數(shù)的可能。但是想想你的電腦是 4核8線程,最多同時(shí)執(zhí)行8個(gè)請(qǐng)求而已,這對(duì)redis來(lái)說(shuō)是非常小的并發(fā)量了。所以我認(rèn)為不出現(xiàn)問(wèn)題是因?yàn)椴l(fā)量小了,實(shí)際上是會(huì)存在問(wèn)題的。
- 2 回答
- 0 關(guān)注
- 1574 瀏覽
添加回答
舉報(bào)
0/150
提交
取消