Redis ltrim - 可能的竞争条件?

时间:2013-05-12 23:38:58

标签: redis

Redis'ltrim和rpush是否存在可能的竞争条件?

例如,假设我的redis列表包含以下项目: [1,2,3,4,5]

我致电ltrim list 4 -1 这基本上应该将列表切片为[5]

但是让我们说:在ltrim启动后和ltrim完成之前的一毫秒,另一个线程正在将项目推送到列表中:

rpush list 6
rpush list 7

当两个rpushes和ltrims都完成时,结果列表是否包含[5,6,7]?

可能只是[5]吗?换句话说,是否存在竞争条件的可能性,其中ltrim执行类似于创建[5]的临时列表,并在完成2次rpushes后用[5]覆盖[5,6,7]?

1 个答案:

答案 0 :(得分:4)

简答:不,因为命令是原子的。

诚实的回答:我不这么认为,因为我认为操作是原子的;但是,该网站没有明确说明它们是原子的,所以我只有99.99999999%确定它们是。

逻辑答案: Redis是单线程的,因此没有其他线程可以抢占ltrim命令。对于在单线程应用程序中发生的竞争条件,它必须在完成之前显式跳出ltrim操作并开始执行其他操作,这没有多大意义。