陋室铭

分布式锁的实现

分布式锁的实现有哪些

  1. Memcached分布式锁
    利用Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也意味着线程得到了锁。

  2. Redis分布式锁
    和Memcached的方式类似,利用Redis的setnx命令。此命令同样是原子性的操作(被set(key,nx,px,expire)替代),
    只有在key不存在的情况下,才能set成功。

  3. Zookeeper分布式锁
    利用Zookeeper的顺序临时节点,来实现分布式锁和等待对列。Zookeeper设计的初衷,也是为了实现分布式锁服务的。

  4. Chubby
    Google公司实现的粗力度分布式锁服务,底层利用了Paxos一致性算法。

Redis分布式锁的实现

1
2
3
4
5

String luaScript="if redis.call('get',KEYS[1])==ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end";
redisClient.eval(luaScript,Collections.singletonList(key),Collections.singletonList(threadId));

这样一来,判断和释放锁就是原子操作了
icefire wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!