读锁非互斥
非互斥的意思就是,一个客户端或者线程加锁之后,另一个客户端线程也可以来进行加锁。
还是拿着ReadLock的lua脚本来看看
刚才我们已经分析过第一个线程来加读锁的逻辑了
所以上半截不用重复说了,
hset anyLock mode read
hset anyLock UUID_01:threadId_01 1
set {anyLock}:UUID_01:threadId_01:rwlock_timeout:1 1
pexpire {anyLock}:UUID_01:threadId_01:rwlock_timeout:1 30000
pexpire anyLock 30000
当前的数据结构是这样的
anyLock: {
“mode”: “read”,
“UUID_01:threadId_01”: 1
}
此时另一个客户端B也要来加读锁,我们来看一下这时候的参数
KEYS[1] = anyLock
KEYS[2] = {anyLock}:UUID_02:threadId_02:rw