资源类网站怎么做,淘宝的17种免费推广方法,四川建设网站官网,ie常用网站设置Hi, I’m Shendi 使用Redis实现分布式锁 需求场景
需要使用到分布式锁的场景非常多#xff0c;例如抢单等并发场景#xff0c;这里举一个例子。
有一个商品#xff0c;限量出售100个#xff0c;一个用户下单#xff0c;数量就减少一个#xff0c;当剩下最后一个时…
Hi, I’m Shendi 使用Redis实现分布式锁 需求场景
需要使用到分布式锁的场景非常多例如抢单等并发场景这里举一个例子。
有一个商品限量出售100个一个用户下单数量就减少一个当剩下最后一个时用户A与用户B同时下单同时查询剩余数量得到为1那么实际出售数量为101而非100。这个时候就需要使用到分布式锁 Redis实现分布式锁
Redis是基于单线程的这意味着所有来自客户端的命令都是顺序执行的因此不必担心Redis内部的并发问题。
最常用的是使用 SETNX SET if Not Exists来实现分布式锁这个命令当key不存在时才设置并返回1存在则不设置并返回0。
为了避免死锁还会设置超时时间Expire即使程序挂掉没有释放锁也会在指定时间后自动销毁锁。
SETNX k v
EXPIRE k 10但这种操作并不是原子性的比如执行 EXPIRE 时出错就会导致死锁。 在Redis2.6.12版本后扩展了SET命令可以像下面这样实现分布式锁。
SET 键 值 NX PX 超时毫秒使用示例如下 可以看到当没有数据的时候设置返回 OK有数据设置返回null并且不会更改已有数据的超时时间 剩下的就是在代码中使用Redis了不同语言使用方法不同这里就不列出来了。 END