本篇文章展示了复述,实现分布式锁的方法具体操作,代码简明扼要容易理解,绝对能让你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。强>
举个不太恰当的例子:假设共享的资源就是一个房子,里面有各种书,分布式系统就是要进屋看书的人,分布式锁就是保证这个房子只有一个门并且一次只有一个人可以进,而且门只有一把钥匙。
<强>使用复述,实现分布式锁,,,,,,,,,,强>
<强>使用复述,命令设置键值NX前任max-lock-time实现加锁强>
<强>使用复述,命令EVAL实现解锁强>
<强>加锁:强>
能能=新能(“127.0.0.1", 6379); 私有静态字符串最后成功=癘K";/* * *加锁操作 * @param关键锁标识 * @param价值客户端标识 * @param超时过期时间 */公共逻辑锁(字符串,字符串值,长超时){ 字符串var1=jedis.set(价值,关键“NX",“EX",超时); 如果(LOCK_SUCCESS.equals (var1)) { 返回true; } 返回错误; }
<>强解读:强>
加锁操作:jedis.set(价值,关键“NX",“EX",超时)【保证加锁的原子操作】
键就是复述的关键值作为锁的标识,价值在这里作为客户端的标识,只有键值都比配才有删除锁的权利【保证安全性】
通过超时设置过期时间保证不会出现死锁【避免死锁】
<强> NX、前任什么意思? 强>
NX:只有这个关键不存才的时候才会进行操作,如果不存在;
例:设置关键的过期时间为秒,具体时间由第5个参数决定
<强>解锁强>
能能=新能(“127.0.0.1", 6379); 私有静态最终长UNLOCK_SUCCESS=1 l;/* * *解锁操作 * @param关键锁标识 * @param价值客户端标识 * @return */公共静态布尔解锁(字符串,字符串值){ 字符串luaScript=叭绻鹯edis.call(\“\”,键[1])==ARGV[1]然后返回redis.call(\“德尔\“键[1])否则返回0以何种;; 对象var2=jedis.eval (luaScript Collections.singletonList(关键),Collections.singletonList(值)); 如果(UNLOCK_SUCCESS==var2) { 返回true; } 返回错误; }
<>强解读:强>
luaScript这个字符串是个lua脚本,代表的意思是如果根据关键拿到的价值跟传入的值相同就执行德尔,否则就返回0【保证安全性】
jedis.eval(字符串,列表,列表);这个命令就是去执行lua脚本,钥匙的集合就是第二个参数,ARGV的集合就是第三参数【保证解锁的原子操作】
上述就实现了怎么使用复述,去正确的实现分布式锁,但是有个小缺陷就是锁过期时间要设置为多少合适,这个其实还是需要去根据业务场景考量一下的。
看完上述内容,你们掌握复述,实现分布式锁的方法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!