db->beginTransaction(); try { $r = call_user_func_array($pFunc, $pParams); $success = true; return $r; } catch (Exception $e) { throw $e; } finally { if (isset($success)) $dbTrans->commit(); else { $dbTrans->rollBack(); //清除脏缓存数据 Yii::$app->redis->clearDirtyKey(); } } } /** * redis加锁操作 * @param callable $pFunc * @param array $pParams * @param string $pLockKey * @param int $pWaitTime * @return mixed * @throws StatusException */ public static function redisLockOperate($pFunc, $pParams, $pLockKey, $pWaitTime = 10) { if (empty($pLockKey)) throw new StatusException(ResultStatusServices::RS_REDIS_LOCK_KEY_EMPTY); //加锁 $redisLock = new RedisLock(Yii::$app->redis, $pLockKey, RedisLock::FLAG_CATCH_EXCEPTIONS); if (!$redisLock->acquire($pWaitTime)) throw new StatusException(ResultStatusServices::RS_SAME_TIME_OPERATION); try { return call_user_func_array($pFunc, $pParams); } finally { //解锁 $redisLock->release(); } } }