zp7412 发表于 2016-12-19 11:41:58

使用redis实现分布式锁

  在多节点的系统中,如何实现分布式锁机制,其中用redis来实现是很好的方法之一,我们先来看一下jedis包中,有个类名BinaryJedis,它有个方法如下:

public Long setnx(final byte[] key, final byte[] value) {
checkIsInMulti();
client.setnx(key, value);
return client.getIntegerReply();
}
   
  它的意思是,设置这个key和value,前提是当前key不存在的情况下,还有一个重要前提,不存在多线程共享一个client,如果设置成功,结果会返回1,如果没有设置成功,结果返回0。

  重点关注的地方是client.setnx(key,value), 到redis 的server端实现方法是原语,主要是充分利用到这一点来实现锁机制的,非常巧妙。
  实现方式除了redis外还有很多的,例如zookeeper,数据库(充分使用事务的隔离机制来实现)等等,可以补充。
页: [1]
查看完整版本: 使用redis实现分布式锁