request->userIP; $todayTime = strtotime(date("Y-m-d")); $visitKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$todayTime; $exists = Yii::$app->redis->executeCommand('SISMEMBER', [$visitKey,$ip]); if(!empty($exists)){ return; } Yii::$app->redis->executeCommand('SADD', [$visitKey,$ip]);//记录当天访问过网站的IP $numKey = $sjId.dict::getCacheKey('statVisitNumByDay').$todayTime; $nowNum = Yii::$app->redis->executeCommand('INCRBY', [$numKey,1]);//记录当天访问网站人数 } /** * 将昨天的保存入库 */ public static function saveYesterdayNum($sjId) { $yesTime = strtotime(date("Y-m-d",strtotime("-1 day"))); $arr = xhStatVisitByDay::getByCondition(['sjId' => $sjId,'time' => $yesTime]); if(!empty($arr)){ return []; } $ipListKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime; $num = Yii::$app->redis->executeCommand('SCARD', [$ipListKey]); $totalVisit = self::getYesterdayTotalVisit($sjId); $data = ['time' => $yesTime,'totalNum' => $totalVisit,'riseNum' =>$num,'sjId' => $sjId,'createTime' => date("Y-m-d H:i:s")]; $saveData = self::add($data); return $saveData; } /** * 总访问量 */ public static function getTotalVisit($sjId) { $yesTime = strtotime(date("Y-m-d",strtotime("-1 day"))); $ipListKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime; $yesNum = Yii::$app->redis->executeCommand('SCARD', [$ipListKey]); $todayTime = strtotime(date("Y-m-d")); $toDayIPListKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$todayTime; $todayNum = Yii::$app->redis->executeCommand('SCARD', [$toDayIPListKey]); $asset = xhMerchantAssetService::getBySjId($sjId); $totalVisit = $asset['totalVisit']; $newTotalVisit = $totalVisit + $yesNum + $todayNum; return $newTotalVisit; } /** * 昨天及以前的总访问量,不包括当天的 */ public static function getYesterdayTotalVisit() { $yesTime = strtotime(date("Y-m-d",strtotime("-1 day"))); $ipListKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime; $yesNum = Yii::$app->redis->executeCommand('SCARD', [$ipListKey]); $asset = xhMerchantAssetService::getBySjId($sjId); $totalVisit = $asset['totalVisit']; $newTotalVisit = $totalVisit + $yesNum; return $newTotalVisit; } /** * 清空昨天的访问数据(包括缓存与数据库) */ public static function clearYesNum($sjId) { $yesTime = strtotime(date("Y-m-d",strtotime("-1 day"))); $visitKey = $sjId.dict::getCacheKey('statVisitNumByDay').$yesTime; $yesterdayVisitNum = Yii::$app->redis->executeCommand('DEL', [$visitKey]); $ipKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime; $yesterdayVisitNum = Yii::$app->redis->executeCommand('DEL', [$ipKey]); xhStatVisitByDay::deleteByCondition(['sjId' => $sjId,'time' => $yesTime]); } /** * 模拟创建昨天的访问IP与数据 */ public static function imitationCreateYesNum($sjId) { $count = rand(10,30); $yesTime = strtotime(date("Y-m-d",strtotime("-1 day"))); echo "\n开始创建昨天的访问量…\n"; for($i=0;$i<$count;$i++){ $ip = stringUtil::randIP(); $visitIPKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime; $exists = Yii::$app->redis->executeCommand('SISMEMBER', [$visitKey,$ip]); if(!empty($exists)){ return; } echo $visitIPKey."\n"; Yii::$app->redis->executeCommand('SADD', [$visitIPKey,$ip]);//记录访问过网站的IP $numKey = $sjId.dict::getCacheKey('statVisitNumByDay').$yesTime; $nowNum = Yii::$app->redis->executeCommand('INCRBY', [$numKey,1]);//记录访问网站人数 } echo "\n创建完成\n"; } /** * 获取昨天的访问IP和数据 */ public static function getYesNum($sjId) { $yesTime = strtotime(date("Y-m-d",strtotime("-1 day"))); $visitPreKey = dict::getCacheKey('statVisitNumByDay'); $visitKey = $sjId.$visitPreKey.$yesTime; $yesterdayVisitNum = Yii::$app->redis->executeCommand('GET', [$visitKey]); echo '
'; echo '昨天的访问总量:'.$yesterdayVisitNum.'
'; $ipKey = $sjId.dict::getCacheKey('gatherVisitIPByDay').$yesTime; echo 'ipList的Key:'.$ipKey.'
'; $list = Yii::$app->redis->executeCommand('SMEMBERS', [$ipKey]); echo 'ipList:
'; print_r($list); $num = Yii::$app->redis->executeCommand('SCARD', [$ipKey]); echo 'ipList里的访问数量统计:'.$num; } /** * 获取今天的访问量 */ public static function getTodayNum($sjId) { $time = strtotime(date("Y-m-d")); $numKey = $sjId.dict::getCacheKey('statVisitNumByDay').$time; $nowNum = Yii::$app->redis->executeCommand('GET', [$numKey]);//记录当天访问网站人数 $nowNum = !empty($nowNum) ? $nowNum : 0; return $nowNum; } /** * 取昨天访问量 */ public static function getYesterdayNum($sjId) { $yesTime = strtotime(date("Y-m-d",strtotime("-1 day"))); $visitPreKey = dict::getCacheKey('statVisitNumByDay'); $visitKey = $sjId.$visitPreKey.$yesTime; $status = Yii::$app->redis->executeCommand('EXISTS', [$visitKey]); if(!empty($status)){ $yesterdayVisitNum = Yii::$app->redis->executeCommand('GET', [$visitKey]); return $yesterdayVisitNum; } $rise = xhStatVisitByDay::getByCondition(['time' => $yesTime]); $num = !empty($rise) ? $rise['riseNum'] : 0; Yii::$app->redis->executeCommand('SET', [$visitKey,$num]); return $num; } public static function add($data) { return xhStatVisitByDay::add($data); } }