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增加域的值
网友评论