Redis锁

Posted 海绵爱上星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis锁相关的知识,希望对你有一定的参考价值。

1、Redis锁(分布式锁有多种,redis只是其中一种实现,核心:加锁,解锁,锁超时,可用于分布式场景和单机场景

  。适用于在分布式系统中,实现不同线程对资源和代码的同步访问——分布式锁)

  1、1两个命令

  SETNX:SET if Not eXist——假如不存在,设置,返回1;否则返回0,说明已经存在,并且设置失败;

  GETSET:GET and SET ——先get得到值,然后set新值

 

  1.2 使用redis作为分布式锁

  在(业务层)关键代码前加锁,代码后解锁。

 

  1.3 可能产生死锁

  若仅仅只调用SETIfAbsent()判断是否加锁成功,则有可能产生死锁。如,如果拿到锁的线程在释放锁之前发生了异常,则不会达到释放锁的语句,那么其他的线程始终拿不到锁的资源,

  造成死锁。

  所以需要采用GETSET方法,给key设置一个时间戳,为当前时间+过期时间。

 

  问题1:getAndSet这个redis命令,两个线程是不会同时get的吗?

  答:不会,Redis是单线程的。

 

以上是关于Redis锁的主要内容,如果未能解决你的问题,请参考以下文章

redis 实现并发锁go

redis 分布式锁

Redis实现分布式锁与Zookeeper实现分布式锁区别

分布式锁用zookeeper还是redis好

分布式锁:二Redis锁

如何使用redis实现分布式锁功能?