2.1 互斥性,任意时刻只有一个人拥有锁
2.2 不会发生死锁,那就是当一个人持有锁之后,因为系统崩溃,而未释放锁,那么就需要释放锁
2.3 具有容错性,当一个redis节点挂掉之后,程序正常工作;
2.4 加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给释放了;
jedis.set(Lockkey, requestId,"NX","PX" , timeout)
lockkey表示为锁,也就是redis中的唯一key,
requestId表示为:标识该锁是哪个客户端加锁的;
NX:set if not exist
PX:表示是有过期时间的
timeout :表示过期时间;
加锁和设置过期时间,必须是一步完成的,也就是原子性;如果不是原子性,先加锁,然后系统崩溃,那么该锁没有过期时间,就成了死锁;
requestId是为了该锁只能由该客户端进行解锁;
解锁过程:
参考 微信公众号 石杉的架构笔记 中的 Redis分布式锁的正确实现方式
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。