2013-05-12 98 views
0

Redis的ltrim和rpush可能存在竞争条件吗?Redis ltrim - 可能的竞争条件?

例如,假设我Redis的列表中有下列项目: [1,2,3,4,5]

我呼吁ltrim list 4 -1 这基本上应该切片列表只[5]

但是,让我们说:LTRIM后一毫秒已经开始,LTRIM完成之前,另一个线程正在推动项目名单:

rpush list 6 
rpush list 7 

当两者是叔他2推,并且ltrims完成,结果列表是由[5,6,7]组成的?

它可能只是[5]?换句话说,是否存在一种竞争条件的可能性,ltrim在[2]中创建了一个临时列表,并在2次完成之后用[5]覆盖了[5,6,7]?

回答

4

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

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

逻辑回答: Redis是单线程的,所以没有其他线程可以抢占ltrim命令。对于在单线程应用程序中出现的竞态条件,它必须在完成之前明确跳出ltrim操作并开始执行其他操作,这没有多大意义。