关于redis原子性测试的疑问?

我知道redis的单个操作是原子性的,如果在代码中对redis进行多次操作将无法保证整个操作流程的原子性。

比如下面的这段代码中,假设nums这个key的值是50,使用ab.exe工具对其1000次访问,并发数是100,理论上结果应该会出现负数的.

可是我多次测试下nums的值都是1,请问是我测试的方式不对还是其他哪里有问题呢?

$nums = $redis->get('nums');if($nums > 1)
    $redis->decr('nums');


红颜莎娜
浏览 1486回答 2
2回答

潇湘沐

你写了判断呀,大于1的时候才递减1你减到1的时候都不执行了,他怎么能作为测试原子性的依据呢?

Helenr

你这样的并发很难测试出来的,的确这样操作存在负数的可能。但是想想你的电脑是 4核8线程,最多同时执行8个请求而已,这对redis来说是非常小的并发量了。所以我认为不出现问题是因为并发量小了,实际上是会存在问题的。
打开App,查看更多内容
随时随地看视频慕课网APP