分布式锁Redission分析

Redission锁总结

1,加锁机制

为了实现原子操作,通过执行一段Lua脚本进行加锁。

首先锁定key, 先判断key是否已经锁定,未锁定则通过hset语句进行锁定

第一步 使用exist判断key是否存在

第二步 hset 第一个参数是key,第二个参数是value,第三个参数是1 。表示创建一个散列key, field域的值是 1

第三步 设置key过期时间

第四步 使用hexists判断散列,field域的值是否为客户端id

第五步 如果是,则filed域的值加一

第六步 重新设置key过期时间

2,互斥机制

客户端2去加锁,

通过第二条语句判断,如果散列field域不是客户端2,则返回pttl剩余的时间

客户端2会进入一个while循环

3, watch dog自动延期

一个后台线程,发现客户端1还持有锁,会不断延长key的时间

4, 可重入加锁机制

第四步判断成功,则会通过hincrby增加域的值

你可能感兴趣的:(分布式锁Redission分析)