码迷,mamicode.com
首页 > 其他好文 > 详细

Redis锁

时间:2020-04-06 17:30:44      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:命令   会同   时间戳   不同   dash   代码   key   核心   过期   

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锁

标签:命令   会同   时间戳   不同   dash   代码   key   核心   过期   

原文地址:https://www.cnblogs.com/zzytxl/p/12642806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!