假设有两个客户端正在访问相同的redis list datastructure。一个是做LPOP而另一个是在同一个列表上做RPUSH。如果它们并行运行,这两个客户端之间是否存在任何争用?当一个客户端访问它时,Redis会锁定mylist(下面),即使并行运行的客户端正在访问mylist的不同端吗?
Client 1
RPUSH mylist a
RPUSH mylist b
Client 2
LPOP mylist
LPOP mylist
客户端1和客户端2并行运行。 如果在这种情况下会有争用,请告诉我。
答案 0 :(得分:6)
Redis是单线程的,因此每个命令都会(保证)以原子方式执行。没有并行/并发访问redis的数据结构,因此在您的方案中,您无法确定谁将首先执行。
答案 1 :(得分:0)
除非您使用MULTI / EXEC创建交易,否则不会阻止另一个,以避免在另一个客户端完成PUSH N值之前一个客户端POPS的竞争条件。