基于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

 

posted @ 2018-02-23 13:29  XuMinzhe  阅读(201)  评论(0编辑  收藏  举报