博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis防止重複請求鎖功能
阅读量:7078 次
发布时间:2019-06-28

本文共 1168 字,大约阅读时间需要 3 分钟。

class Lock{    const PREFIX_KEY = "MY_LOCK:";    static private $LOCKED = [];        static public function tryLock($key, $expire = 300)    {                $lock = self::PREFIX_KEY.$key;                //已取得到lock(防止同行程重覆要求造成deadlock)        if(self::$LOCKED[$lock]) {            ++self::$LOCKED[$lock];            return true;        }                //處理lock        $redis = &AppBase::getRedis();        if(!$redis->setnx($lock, '')) {            return false;        }        $redis->expire($lock, $expire); //防止crash沒解鎖                //成功lock        ++self::$LOCKED[$lock];        return true;    }        static public function unlock($key)    {                $lock = self::PREFIX_KEY.$key;                if(--self::$LOCKED[$lock] <= 0) {            AppBase::getRedis()->delete($lock);            unset(self::$LOCKED[$lock]);        }            }        static public function blockLock($key, $max_try = 60, $sleep = 1, $expire = 300)    {        $t = 0;        while(++$t <= $max_try) {            if(self::tryLock($key, $expire)) {                return true;            }            usleep(intval($sleep * 1000000));        }        return false;    }    }

 

转载地址:http://bwvml.baihongyu.com/

你可能感兴趣的文章
SQL Server中sp_spaceused统计数据使用的空间总量不正确的原因
查看>>
不一样的Java Enum
查看>>
Visual Studio 2015 和 Apache Cordova 跨平台开发入门
查看>>
Java Web之Cookie和Session的理解
查看>>
C#使用Xamarin开发可移植移动应用(4.进阶篇MVVM双向绑定和命令绑定)附源码
查看>>
spark 统计每天新增用户数
查看>>
使用.NET Core搭建分布式音频效果处理服务(二)创建基于FFMpeg的Web程序
查看>>
Python 面向对象程序设计
查看>>
LOWER
查看>>
Rust 全新官网已上线测试,这样的风格你喜欢吗?
查看>>
Git 使用总结
查看>>
OSS 监控
查看>>
Python爬虫之小猪短租房
查看>>
时隔 3 年,音频播放器 DeaDBeeF 发布 1.8.0 版本
查看>>
阿里云服务器架设javaweb网站全攻略
查看>>
py django web quickstart
查看>>
CCleaner v5.55.7108 发布,新增软件升级功能
查看>>
简书文章被锁定
查看>>
产品经理第三章:为什么我们的产品总是失败
查看>>
Centos7-tomcat已启动并且配置变量环境,依然无法进入
查看>>