Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个客户端可以同时访问同一个列表而不会在Redis中被阻止吗?_Redis - Fatal编程技术网

多个客户端可以同时访问同一个列表而不会在Redis中被阻止吗?

多个客户端可以同时访问同一个列表而不会在Redis中被阻止吗?,redis,Redis,假设有两个客户端正在访问相同的redis列表数据结构。一个在做LPOP,另一个在同一个列表上做RPUSH。如果这两个客户端并行运行,它们之间会有争用吗?当一个客户端访问mylist时,即使并行运行的客户端访问mylist的不同端,Redis是否会锁定mylist(如下) Client 1 RPUSH mylist a RPUSH mylist b Client 2 LPOP mylist LPOP mylist 客户端1和客户端2并行运行。 让我知道在这种情况下是否会有争用。Redis是单线

假设有两个客户端正在访问相同的redis列表数据结构。一个在做LPOP,另一个在同一个列表上做RPUSH。如果这两个客户端并行运行,它们之间会有争用吗?当一个客户端访问mylist时,即使并行运行的客户端访问mylist的不同端,Redis是否会锁定mylist(如下)

Client 1
RPUSH mylist a
RPUSH mylist b

Client 2
LPOP mylist
LPOP mylist
客户端1和客户端2并行运行。
让我知道在这种情况下是否会有争用。

Redis是单线程的,因此它的每个命令都(保证)以原子方式执行。不存在对redis数据结构的并行/并发访问,因此在您的场景中,您无法判断谁将首先执行

除非使用MULTI/EXEC创建事务,否则其中一个不会阻止另一个,以避免竞争条件,即一个客户端在另一个客户端完成推送N值之前弹出

在一天结束时,所有命令都按顺序发出。谁先来,谁就得到服务。多路复用指的是如何从侦听套接字中拾取所有传入命令并将其序列化以执行。但严重的是,您的案例受到并发随机性的强烈影响。