基于redis的分布式锁
分布式环境下,数据一致性问题一直是一个比较重要的话题,而又不同于单进程的情况。分布式与单机情况下最大的不同在于其不是多线程而是多进程。多线程由于可以共享堆内存,因此可以简单的采取内存作为标记存储位置。而进程之间甚至可能都不在同一台物理机上,因此需要将标记存储在一个所有进程都能看到的地方。
常见的分布式锁有三种
1. 数据库乐观锁;
2. 基于Redis的分布式锁;
3. 基于ZooKeeper的分布式锁
本次研究的是基于Redis的分布式锁,在讲redis锁之前,我们先了解两个redis命令
SETNX
将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。
设置成功,返回 1 。
设置失败,返回 0 。
EXPIRE
为给定 key
设置生存时间,当 key
过期时(生存时间为 0
),它会被自动删除。
这个超时不好演示,这里就不做演示了
加锁:
通过setnx指令,实现了锁的排他性,又设置了过期时间,防止这个锁长时间不释放
释放:
释放的过程就是把加锁时添加的数据删除
关键代码如下
删除之前有相应的条件判断
以上就是redis的分布式锁
参考:http://doc.redisfans.com/string/setnx.html