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是单线程的。

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-21
  • 2021-12-05
  • 2021-10-04
  • 2021-11-01
  • 2021-12-03
  • 2021-10-21
猜你喜欢
  • 2021-09-24
  • 2022-12-23
  • 2021-07-06
  • 2021-05-06
  • 2022-01-18
  • 2022-02-10
  • 2021-09-15
相关资源
相似解决方案