Authored by wuxiao

修改接口实时获取在线人数和观看人数的方式

... ... @@ -87,16 +87,16 @@ class LivingController extends BaseController
->getRawSql()]);
$this->cache->set($key, json_encode($ret), Yii::$app->params['defaultCacheExpire'], $dependency);
}else{
Yii::$app->db->cache(function() use (&$ret){
$_ret = json_decode($ret,true);
$models = RoomNums::find()->indexBy('room_id')->all();
foreach ($_ret as $k=>$row){
if (!empty($models[$row['room_id']]->online_num)){
$row['audience_num'] = (int)$models[$row['room_id']]->online_num;//在线人数
}
$_ret[$k] = $row;
}
}, 60);
$_ret = json_decode($ret,true);
$keys = [];
foreach ($_ret as $k=>$row){
$keys[] = sprintf("%sonline_nums_room_%s",Yii::$app->params['cache_prefix'],$row['room_id']);
}
$values = call_user_func_array(array(Yii::$app->redisIm,'mget'), $keys);
foreach ($values as $k=>$value){
$_ret[$k]['audience_num'] = (int)($value ? : $_ret[$k]['audience_num']);
}
$ret = $_ret;
}
... ... @@ -170,16 +170,16 @@ class LivingController extends BaseController
->getRawSql()]);
$this->cache->set($key, json_encode($ret), Yii::$app->params['defaultCacheExpire'], $dependency);
}else{
Yii::$app->db->cache(function() use (&$ret){
$_ret = json_decode($ret,true);
$models = Video::find()->where(['app'=>$this->app])->indexBy('id')->all();
foreach ($_ret as $k=>$row){
if (!empty($models[$row['video_id']])){
$row['audience_num'] = (int)($models[$row['video_id']]->audience_num+$models[$row['video_id']]->replay_num);
}
$_ret[$k] = $row;
}
}, 60);
$_ret = json_decode($ret,true);
$keys = [];
foreach ($_ret as $k=>$row){
$keys[] = sprintf("%svideo_id_%s_audience_num",Yii::$app->params['cache_prefix'],$row['video_id']);
}
$values = call_user_func_array(array(Yii::$app->redis,'mget'), $keys);
foreach ($values as $k=>$value){
$_ret[$k]['audience_num'] = (int)($value ? : $_ret[$k]['audience_num']);
}
$ret = $_ret;
}
$this->renderJson(Yii::$app->params['success_code'],'',$ret);
... ... @@ -288,9 +288,6 @@ class LivingController extends BaseController
}elseif ($video_id = $this->requests('video_id'))
{//重播视频详情
//观看人数+1
$incr = Video::updateAllCounters(['replay_num' => 1],['id'=>$video_id]);
$key = __CLASS__.__FUNCTION__.'video_id'.$video_id;
if (!$ret = $this->cache->get($key)){
if (!$model = Video::findOne(['id'=>$video_id])){
... ... @@ -338,19 +335,23 @@ class LivingController extends BaseController
->bindValue(':video_id', $video_id)
->getRawSql()]);
$this->cache->set($key, json_encode($ret), Yii::$app->params['defaultCacheExpire'], $dependency);
}else{
$_ret = json_decode($ret,true);
$key = __CLASS__.__FUNCTION__.'video_id'.$video_id.'audience_num';
if (!$audience_num = Yii::$app->redis->get($key)){
$audience_num = (int)$_ret['audience_num'];
Yii::$app->redis->setex($key, Yii::$app->params['defaultCacheExpire']*2, $audience_num);
}
$_ret['audience_num'] = $audience_num;
if ($incr && Yii::$app->redis->incr($key)){
$_ret['audience_num'] += 1;
}
$ret = $_ret;
}
if (is_string($ret)){
$ret = json_decode($ret,true);
}
//缓存回放观看人数
$key = sprintf("%svideo_id_%s_audience_num",Yii::$app->params['cache_prefix'],$video_id);
if (!$audience_num = Yii::$app->redis->get($key)){
$audience_num = (int)$ret['audience_num'];
Yii::$app->redis->setex($key, Yii::$app->params['defaultCacheExpire']*2, $audience_num);
}
$ret['audience_num'] = $audience_num;
//观看回放人数+1
if (Video::updateAllCounters(['replay_num' => 1],['id'=>$video_id]) && Yii::$app->redis->incr($key)){
$ret['audience_num'] += 1;
}
$this->renderJson(Yii::$app->params['success_code'],'',$ret);
... ...