Redis 中的 RPUSH 和 LPUSH 可以赛跑吗?
Can RPUSH and LPUSH in Redis race?
RPUSH
和 LPUSH
上 redis.io 的文档不清楚这些操作在推送多个项目时是否仍然是 O(1) 和事务性的。例如,如果两个客户端对包含多个项目的同一个列表执行 RPUSH
,他们的项目是否会散布从而乱序?
tadman 对他的回答的评论最适合我:
由于 Redis 是单线程的,因此不会发生在 "same time" 时发生的事情,一个总是先于另一个,尽管时间通常是您无法控制的。
现在,如果您有两个进程可以以某种方式协调,您可以让一个进程推迟到另一个进程,直到该操作完成。如果您担心这一点,您可以创建某种悲观锁,尽管这只是这里的一种解决方案。
所以简短的回答是,是的,它们将以随机顺序到达。
这就是 Redis 实施 MULTI
命令来对事务进行批处理的原因。这些事务将自动应用。
RPUSH
和 LPUSH
上 redis.io 的文档不清楚这些操作在推送多个项目时是否仍然是 O(1) 和事务性的。例如,如果两个客户端对包含多个项目的同一个列表执行 RPUSH
,他们的项目是否会散布从而乱序?
tadman 对他的回答的评论最适合我:
由于 Redis 是单线程的,因此不会发生在 "same time" 时发生的事情,一个总是先于另一个,尽管时间通常是您无法控制的。
现在,如果您有两个进程可以以某种方式协调,您可以让一个进程推迟到另一个进程,直到该操作完成。如果您担心这一点,您可以创建某种悲观锁,尽管这只是这里的一种解决方案。
所以简短的回答是,是的,它们将以随机顺序到达。
这就是 Redis 实施 MULTI
命令来对事务进行批处理的原因。这些事务将自动应用。