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