RPUSH
和LPUSH
上的redis.io上的文档不清楚这些操作在推送多个项目时是否仍为O(1)和转换。例如,如果两个客户端对具有多个项目的同一列表执行RPUSH
,那么他们的项目是否会散布,从而导致无序?
tadman对他的回答的评论为我做了最好的清除:Can RPUSH and LPUSH in Redis race?
答案 0 :(得分:3)
由于Redis是单线程的,所以没有它们在“同一时间”发生,一个总是在另一个之前到达,尽管时间通常超出你的控制范围。
现在,如果你有两个进程可以以某种方式协调,你可以让一个进程推迟到另一个进程,直到该操作完成。如果你担心这个问题,你可能会产生某种悲观锁定,尽管这只是一个解决方案。
所以简短的回答是,是的,它们将以随机顺序到达。
这就是Redis实现MULTI
命令来批量处理事务的原因。这些交易将以原子方式应用。