美文网首页
redis互斥锁防止抢券重复

redis互斥锁防止抢券重复

作者: 大胡子商人 | 来源:发表于2017-04-24 18:04 被阅读264次

redis的互斥锁自身可以设置过期时间防止进程崩溃成为死锁,如果抢券过程中出现什么异常则手动删除该锁(这里需要权衡是手动删除还是等他自动过期)

//请求进来,需要检查参数和验证码等是否合法
//该检查的都检查下

//这里开始真正操作
try{
    $expire=2;  //过期时间2秒
    if($redis->set('lock_name', 'lock_value', ['nx', 'ex'=>$expire])){
        //此时第一个正常请求进来后 其他请求都排除掉了 开始正常代码

    } else {
        //此时应该提示请求已经在处理了 提示用户重复提交
    }
} catch(Exception $ex){
    //手动删除锁或者不作为等锁过期?
    $redis->del('lock_name');
    //返回抢券失败
}

此处不建议手动删除排他锁,因为正常一个请求过来如果失败,下一次需要获取验证码的,其实时间足够的。 如果手动删除很可能由于请求时间过长最后失败删除锁造成删除其他不该删除的锁导致内容重复。当然具体问题具体分析。

参考:https://huoding.com/2015/09/14/463

相关文章

  • redis互斥锁防止抢券重复

    redis的互斥锁自身可以设置过期时间防止进程崩溃成为死锁,如果抢券过程中出现什么异常则手动删除该锁(这里需要权衡...

  • redisson中的看门狗机制总结

    1:普通的Redis分布式锁的缺陷 我们在网上看到的redis分布式锁的工具方法,大都满足互斥、防止死锁的特性,有...

  • 2020-08-25:要实现一个Redis的分布式锁要注意什么?

    前言 每日一题专栏 要实现一个Redis的分布式锁要注意什么? 互斥性,同一时刻,智能有一个客户端持有锁。 防止死...

  • 分布式锁

    分布式锁需要解决下面问题 互斥性 续命(比如想延长redis锁的加锁时间) 锁释放 HA一致性(比如redis主备...

  • 互斥锁mutex/lock_guard/unique_lock

    互斥锁 互斥锁的应用场景,对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢导致程序出现未...

  • 进程 二

    目录 1.守护进程 2.互斥锁 3.互斥锁场景抢票 4.死锁 5.IPC 6.队列 7.生产者消费者模型

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • php+redis消息队列实现抢购功能

    实现功能: 基于redis队列,防止高并发的超卖 基于mysql的事务加排它锁,防止高并发的超卖基于redis队列...

  • Golang 锁的相关知识

    Golang锁分类:互斥锁(Mutex)、读写锁(RWMutex)。 互斥锁 在编写代码中引入了对象互斥锁的概念,...

  • iOS底层探索-多线程锁

    多线程的锁大致可分为两大类:互斥锁、自旋锁;也可以分为三类:互斥锁、自旋锁、读写锁。 一、互斥锁:互斥+同步(强调...

网友评论

      本文标题:redis互斥锁防止抢券重复

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