Redis的RPUSH和LPUSH可以比赛吗?

时间:2015-06-11 22:23:19

标签: transactions redis race-condition

RPUSHLPUSH上的redis.io上的文档不清楚这些操作在推送多个项目时是否仍为O(1)和转换。例如,如果两个客户端对具有多个项目的同一列表执行RPUSH,那么他们的项目是否会散布,从而导致无序?

tadman对他的回答的评论为我做了最好的清除:Can RPUSH and LPUSH in Redis race?

1 个答案:

答案 0 :(得分:3)

由于Redis是单线程的,所以没有它们在“同一时间”发生,一个总是在另一个之前到达,尽管时间通常超出你的控制范围。

现在,如果你有两个进程可以以某种方式协调,你可以让一个进程推迟到另一个进程,直到该操作完成。如果你担心这个问题,你可能会产生某种悲观锁定,尽管这只是一个解决方案。

所以简短的回答是,是的,它们将以随机顺序到达。

这就是Redis实现MULTI命令来批量处理事务的原因。这些交易将以原子方式应用。