php之yii2简单redis锁限制
2020-04-02 18:47
666 查看
yii2框架简单加锁锁定本次任务没执行完之前不允许再请求本次方法,注意这只是简单实现能应对几乎所有并发场景,但是对并发有绝对要求的还是要用队列加异步处理去实现。
$key='redis_key_name:'.'订单id或其他本次锁的唯一值'; //判断不是空直接中断本次操作 if(!empty(Yii::$app->redis->get($key))){ //随便你们return或其他友好输出,下面的输出只是个人示例 throw new Exception(-10007, "红包领取中,请稍后"); } //确定没锁后先赋值redis,锁上先 Yii::$app->redis->set($key,'1'); //随便打上个1做标识 Yii::$app->redis->expire($key, 300); //设置锁的时间,具体看自己的业务场景,一般一个接口请求不超过60秒 //这里需要用try catch,防止中途出异常,导致没解锁 try { //具体处理的业务逻辑代码 Yii::$app->redis->del($key); //业务逻辑处理完毕,解锁 } catch (\Throwable $e) { Yii::$app->redis->del($key); //业务逻辑处理失败,还是解锁 //日志方法,具体自己实现 CoreHelper::write(json_encode(['eventName','order_id'=>$order->order_id??'',$e->getMessage()], JSON_UNESCAPED_UNICODE)); }
注意:
1、Throwable为php7及以上版本的万能捕获任何异常,php7以下版本用:Exception
2、请确定自己已经在配置文件配置redis配置
找到config/development.php(开发环境)或config/production.php(生产环境),在’components’ => []中加入,如:
'components' => [ 'redis' => [ 'class' => 'BaseComponents\base\RedisConn', 'hostname' => '127.0.0.1', 'port' => 6379, ], ]
3、Yii如果找不到请在命名空间后加 use Yii;
作者:xingguang
链接:原文链接:https://www.tiance.club/post/2709942805.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- PHP实现redis限制单ip、单用户的访问次数功能
- Yii框架的redis命令使用方法简单示例
- PHP 使用redis简单示例分享
- php非常简单的文件上传,没有文件类型、大小限制
- 【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合 PHP解决抢购、秒杀
- Centos7下安装php-redis扩展及简单使用
- Redis队列——PHP操作简单示例
- 如何安装php的redis扩展,以及几个简单实用的php操作
- Redis队列——PHP操作简单示例
- Centos7下安装php-redis扩展及简单使用
- linux下redis与phpredis安装详解与简单操作
- 简单介绍一些php操作redis常用方法代码例子
- 【高并发简单解决方案】redis队列缓存 + 批量入库 + php离线整合
- Centos7下安装php-redis扩展及简单使用
- php不用Redis扩展的简单队列
- php yii 框架 登录自写jquery单删,批删,单加。多条件搜索,批加,简单日志,即点改
- PHP中Yii2框架用redis实现限制接口访问次数
- PHP操作 Redis队列简单示例
- 通过PHP操作Redis的简单使用--Redis学习笔记七
- Redis基于PHP简单使用汇集