Redis-在Redis中,多个客户端对同一个链表(list)并发操作会不会被阻塞?

Redis-在Redis中,多个客户端对同一个链表(list)并发操作会不会被阻塞?

浮生未歇 发布于 2017-07-24 字数 318 浏览 1153 回复 2

假设有两个客户端在访问同一个list,第一个客户端做的操作是LPOP,第二个客户端做的操作是RPUSH,如果它们都是同时操作会不会产生竞争?Redis会不会在第一个客户端操作时锁住当前list?伪代码如下:

client 1
RPUSH list a
RPUSH list b

client 2
LPOP list
LPOP list

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2017-10-28 2 楼

不会的,Redis只做单纯的LPOP,RPUSH操作。并且Redis暂时还没有锁的概念。只有通过客户端实现乐观锁的方式满足你的需求,利用Redis的简单事务,大致代码如下:
Client 1

watch list
multi
RPUSH list a
RPUSH list b
exec

Client 2

 watch list
multi
LPOP list
LPOP list
exec

Redis事务的详细说明请见:http://redis.io/commands#transactions

夜无邪 2017-08-03 1 楼

redis都是单线程操作,根本没有锁的概念,每个指令都是原子性的。在说了,即使是多线程,你的这两个操作都不能形成等待和阻塞。