美文网首页
7.2-基于Redis实现分布式锁的几种坑你是否踩过《上》—小滴

7.2-基于Redis实现分布式锁的几种坑你是否踩过《上》—小滴

作者: 小滴极客编程学习 | 来源:发表于2021-11-05 10:16 被阅读0次

7.2-基于Redis实现分布式锁的几种坑你是否踩过《上》

基于Redis实现分布式锁的几种坑你是否踩过《上》

简介:基于Redis实现分布式锁的几种坑

实现分布式锁 可以用 Redis、Zookeeper、Mysql数据库这几种 , 性能最好的是Redis且是最容易理解

分布式锁离不开 key - value 设置

key 是锁的唯一标识,一般按业务来决定命名,比如想要给一种优惠券活动加锁,key 命名为 “coupon:id” 。value就可以使用固定值,比如设置成1

基于redis实现分布式锁

加锁 SETNX key value

setnx 的含义就是 SET if Not Exists,有两个参数 setnx(key, value),该方法是原子性操作

如果 key 不存在,则设置当前 key 成功,返回 1;

如果当前 key 已经存在,则设置当前 key 失败,返回 0

解锁 del (key)

得到锁的线程执行完任务,需要释放锁,以便其他线程可以进入,调用 del(key)

配置锁超时 expire (key,30s)

客户端奔溃或者网络中断,资源将会永远被锁住,即死锁,因此需要给key配置过期时间,以保证即使没有被显式释放,这把锁也要在一定时间后自动释放

综合伪代码

methodA(){

  String key = "coupon_66"

  if(setnx(key,1) == 1){

     expire(key,30,TimeUnit.MILLISECONDS)

     try {

         //做对应的业务逻辑

         //查询用户是否已经领券

         //如果没有则扣减库存

         //新增领劵记录

     } finally {

         del(key)

     }

  }else{

   //睡眠100毫秒,然后自旋调用本方法

    methodA()

  }

}

存在哪些问题,大家自行思考下

《小滴课堂-Redis6学习笔记》

相关文章

网友评论

      本文标题:7.2-基于Redis实现分布式锁的几种坑你是否踩过《上》—小滴

      本文链接:https://www.haomeiwen.com/subject/eoalzltx.html