redis内存锁,PHP防止并发操作
2018-03-27 10:51
274 查看
1、redis锁代码: /** * 获取锁 * @param String $key 锁标识 * @param Int $expire 锁过期时间 * @return Boolean */ public function lock($key, $expire=5){ $is_lock = $this->_redis->setnx($key, time()+$expire); // 不能获取锁 if(!$is_lock){ // 判断锁是否过期 $lock_time = $this->_redis->get($key); // 锁已过期,删除锁,重新获取 if(time()>$lock_time){ $this->unlock($key); $is_lock = $this->_redis->setnx($key, time()+$expire); } } return $is_lock? true : false; } /** * 释放锁 * @param String $key 锁标识 * @return Boolean */ public function unlock($key){ return $this->_redis->del($key); } 2、业务代码(php) //设置锁,防止多个用户并发操作连麦超出数量限制 $lockKey = CacheKeyManage::getLianMaiLockKey($partyId); //缓存key $redis = new RedisHelperUtil(); $lock = $redis->lock($lockKey); if(!$lock) { for($i=0;$i<3;$i++){ //重试3次,如果3次还未获取倒锁提示繁忙 $lock = $redis->lock($lockKey); if($lock){ break; } sleep(1); } if(!$lock){ return self::setAndReturn(ErrorCode::ERR_OTHER_ERR,'服务器获取锁获取不到,$lockKey:'.$lockKey); } } doAction..... //获取到了锁,做自己的业务
相关文章推荐
- redis内存锁,PHP防止并发操作
- PHP使用Redis实现防止大并发下二次写入的方法
- php使用redis防止并发
- PHP实现Redis单据锁以及防止并发重复写入
- PHP使用redis防止大并发下二次写入
- php结合redis实现高并发下的抢购、秒杀功能
- PHP 操作redis 封装的类
- php结合redis实现高并发下的抢购、秒杀功能的实例
- PHP操作Redis命令
- redis 队列操作的例子(php)
- php结合redis实现高并发下的抢购、秒杀功能
- php中对共享内存,消息队列的操作
- php使用redis实现高并发下的抢购功能
- ASP.NET 怎么防止并发操作?
- php简单的操作redis的5种数据类型
- PHP垃圾回收机制防止内存溢出
- redis队列缓存+sql批量入库+php离线整合(高并发简单解决方案)
- PHP中利用redis实现消息队列处理高并发请求
- php结合redis实现高并发下的抢购、秒杀功能
- 30个php操作redis常用方法代码例子