复述,实现分布式锁的方法

  介绍

本篇文章展示了复述,实现分布式锁的方法具体操作,代码简明扼要容易理解,绝对能让你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性。

举个不太恰当的例子:假设共享的资源就是一个房子,里面有各种书,分布式系统就是要进屋看书的人,分布式锁就是保证这个房子只有一个门并且一次只有一个人可以进,而且门只有一把钥匙。

<强>使用复述,实现分布式锁,,,,,,,,,,

<强>使用复述,命令设置键值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的集合就是第三参数【保证解锁的原子操作】

上述就实现了怎么使用复述,去正确的实现分布式锁,但是有个小缺陷就是锁过期时间要设置为多少合适,这个其实还是需要去根据业务场景考量一下的。

看完上述内容,你们掌握复述,实现分布式锁的方法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

复述,实现分布式锁的方法