比如要顯示一個類目下所有子項的瀏覽量總和 但不可能使用者訪問一次就統計一次 太耗費資源 請大神指點下 如何?隔一段時間自己才會再次統計
回複內容:
比如要顯示一個類目下所有子項的瀏覽量總和 但不可能使用者訪問一次就統計一次 太耗費資源 請大神指點下 如何?隔一段時間自己才會再次統計
$redis = new redis();$pv = "select pv from views where id={$id}";//第一次的pv值$num = 100;// 累計100更新資料庫$incrPv = $redis->incr('pv:'.$id);if ($incrPv % $num === 0) { $sql = "update views set pv=pv+{$num} where id = {$id}";} else if ($incrPv == 1) { $incrPv = $pv + 1; $redis->set('pv:'.$id, $incrPv);}
寫個定時指令碼統計出老資料
統計瀏覽數量可以用redis做緩衝
即時統計寫到redis或其他nosql資料庫裡面,crontab定時計算並清空nosql
線上執行PHP代碼
很簡單,只要在你設定顯示對應類目下子項瀏覽量的地方設定緩衝就可以了。
比如我舉這樣一個例子:
// 這個方法是你說的統計一個父類下對應所有子類的瀏覽量的綜合,`$time`是設定的緩衝時間function getCategoryNum($categoryId, $time=3600){ // 根據父類id統計所有子類的瀏覽量}// 這個是每次訪問時統計到你資料庫或者緩衝的地方的方法。這個方法是不用設定緩衝的,因為每次都要做統計function getViewsNum(){ // 使用者訪問瀏覽量+1操作}
通過上面的getCategoryNum()方法設定了緩衝時間,在緩衝時間內是不會去請求資料庫的,只有時間到了才會去請求資料庫擷取最新的統計,這就是根絕你設定的時間來看的了。
如何設定緩衝你項目中應該有的吧!如果要去做定時任務,我覺得有點浪費了。當然我並不確定你具體的業務需求,一切以你的業務需求為準。希望對你有協助
如果說不打算用其他緩衝技術的話,可以使用mysql進行緩衝,緩衝結構大致為Key,Value,最後更新時間,如果超過這個時間的話就進行更新,需要注意的是寫入的時候需要考慮是否校正寫入版本的一致性