首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis实现分布式锁

Redis实现分布式锁

分布式锁要解决的几个问题:

互斥性,同一时刻只能有一台服务器能访问资源

安全性,锁只能被持有该锁的客户端删除或者释放

容错,在服务器宕机的时候,锁仍能得到释放或者其他服务器可以进行加锁

避免死锁

方案1

首先使用setnx命令,即当没有key存在的时候,才会创建value。

当执行成功的时候会返回1

当执行失败的时候会返回0

使用expire命令,指定key的过期时间

image.png

问题:

因为操作不是原子性的,如果在进行setnx的时候,刚好服务器宕机,没有来得及进行expire,那么该key将一直无法释放。

方案2

直接使用redis的原子命令:

EX: key在多少秒之后过期

PX:key在多少毫秒之后过期

NX: 当key不存在的时候,才创建key,效果等同于setnx

XX:当key存在的时候,覆盖key

image.png

问题:

当同一时刻有大量的key过期的时候,删除key是需要时间的,可能导致redis出现暂时的卡顿现象,要如何解决?

答:在设置key过期时间的时候加上一个随机值

参考

Redis防阻塞小知识

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190218G1CEZD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券