1)簡單粗暴型的,這裏不用去管瀏覽器的user-agent,無論cookie等信息,每產生一次PV,就直接計數,優勢:簡單,缺點:可能不真實,也可能有刷量數據javascript
2) 稍微細膩點的統計,會區分新老用戶,樓主你能夠研究下baidu統計的SDK,裏面包含有用戶的瀏覽器信息,操做系統信息、用戶的地域信息等,也就是說, 你經過瀏覽器的javascript以及和服務器數據的交互,對於後臺服務器來講,是能夠獲取這些數據的,那麼對於站長之家這樣的網站,他可能想要統計到 真實的用戶訪問狀況,以便有些行爲分析,這時會結合用戶的IP信息、cookie信息(也就是session)和user-agent來統計分析,注意, 這裏的IP是映射後的IP地址,對於咱們平常的家庭撥號上網,都是拿到的運營商的虛擬出來的內網地址,以便節省IPv4資源,因此說,一個user- agent、IP、cookie基本上能惟一標識一個用戶信息。java
3) 進一步說,有了這些數據以後,從設計角度來講,閱讀量的這個信息在頁面展示中不是優先級最高的(優先級最高的應該是業務內容自己),但閱讀量的相關信息是 有意義的,那麼問題來了,對於閱讀量這種信息是否在數據庫的設計層面上要加寫鎖去互斥? 這裏推薦瞭解下什麼是CAP原理。redis
4) 因此解決方案,多是緩存,也多是有IP的判斷、cookie的檢測,這個要嘗試以後才知道了,不過我的以爲可能性最大的是這個閱讀量,汽車之家採用的是一個異步統計的辦法,也就是說你產生真實的閱讀以後,他是通過後臺處理以後纔給閱讀量計數器+1的。
提供一下實現這種思路:算法
一個IP最多隻增長兩次閱讀相似的機制,或者還有更深一層次邏輯判斷的,好比次日IP清空,而後這個統計算法變成了每一天每個IP都有兩次閱讀次數增長的機會數據庫
一段固定時間內(好比30分鐘),無論你用同一個瀏覽器內核訪問多少次只增長一次閱讀量。瀏覽器
校驗user-agent、cookie等信息;每一次瀏覽插入一條訪客記錄到A表緩存
微博實現:我是作微博的,我說說微博的作法。閱讀量,點贊數,單訪問限制。都是用redis實現的。而後天天夜裏空閒時段同步數據庫(按必定規則,分批等)。服務器
若是用戶已經登陸,只統計一次;若是是遊客,則根據IP、timestamp、cookie等綜合判斷,相同就只統計一次。
這樣能夠防止刷瀏覽量。cookie