使用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,数据库(充分使用事务的隔离机制来实现)等等,可以补充。

猜你喜欢

转载自qifeifei.iteye.com/blog/2222279