前言
浏览量是用来计算站点上有多少网页被个体的访客来浏览。即页面访问量或点击量,用户每1次对网站中的每个网页访问均被记录1次。用户对同一页面的多次访问,访问量累计。
页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。网页浏览数是评价网站流量最常用的指标之一,简称为PV。监测网站PV的变化趋势和分析其变化原因是很多站长定期要做的工作。
Page Views中的Page一般是指普通的html网页,也包含php、jsp等动态产生的html内容。来自浏览器的一次html内容请求会被看作一个PV,逐渐累计成为PV总数。
关系
1.IP和PV之间的关系:
PV是和IP的数量是成正比的,因为页面被刷新一次那么PV就会被记录一次,所以IP越多,说明网站的PV数据也就随之增多。但是需要注意的是PV并不是网站的页面的访问者数量,而是网站被访问的页面数量。因为一个访问者可以多次刷新页面,增加PV数量。
2.IP和UV之间的关系:
在记录网站流量统计数据时,站长们有时候发现这样一种情况:有时候网站的IP数据大于UV数据,有时候UV的数据也会大于IP数据。为什么会出现这种现象呢?我们可以用一个例子来说明。
比如,用同一个IP去访问我们的SEO网站,但是一个是用的台式的电脑,一个是用的笔记本,那么网站流量统计工具显示的数据就会是2个UV,1个IP。这时UV的数据就会大于IP的数据。
但是,再比如,只是用一个台式电脑访问我们的SEO网站,但是一会拨一个号换一个IP,那么这时候网站流量统计工具显示的数据的UV就为1,但是IP的数据就会高于UV的数据。因此,IP和UV之间的数据并不一定存在比例关系,两者之间的数据也不是此消彼长的关系。
3.IP和PV之间的关系:
那么IP和PV的关系如何呢?如果一个IP刷新了网站1000次,网站的PV就为1000,所以从这点看二者之间没有多大关系。但是,我们可以通过IP和PV之间的数据差异,来更加深入的理解网站的流量数据。
如果IP和PV的数据悬殊很大,比如,我们在查看网站流量数据时发现网站的PV是1000,IP为100,那么说明这个站点平均一个IP访问了网站内容10次,说明网站内容还是比较受欢迎的,所以访客才愿意在网站中停留那么久的时间,并浏览了那么多的网站页面内容。
但是如果IP和PV的数据很接近,比如,网站的IP为100,PV为110,说明一个IP也就访问了网站内容大约1次,就说明网站内容的可读性太差,客户点击进去之后就离开了,没有有过多的停留。
如果网站流量统计这样的数据过多的话,站长就需要对网站内容进行深入思考了,以便更好的提高网站的流量。
对于社区类、新闻类网站的建设维护,浏览量提供了很多的数据支撑。
那么,如何实现一个很好的浏览量统计,这是一个值得开发者思考的问题。
完整的需求
- 用户可以是匿名的,不需要登录
- 每当一个用户点击了一个文章的详情页面,这个文章的浏览量应该+1
- 用户应该能立即看到自己点击文章后浏览量+1的反馈
- 浏览量这个数据存在Mysql和ElasticSearch里面,要最终一致(不要求强一致)
- 作者可能在后台编辑文章,然后保存文章。如果在这期间有浏览量的增加,保存文章的时候不应该覆盖掉这段时间的浏览量增量。
- 应该在服务端对用户的请求去重,防止用户不断刷新或者使用爬虫不断请求某个API(建议通过IP)
- 要过滤掉百度和谷歌的爬虫请求(根据User-Agent头判断,可以先不做)
- 要高性能地实现“查看浏览最多文章列表”的功能。
- 尽可能优化性能,满足多个用户的高并发需求。
分析之后,我们可以总结出9条简单地需求,那么,最佳的实践是什么呢?
实现方案
根据我们的需求,我们采用最简单的方式,实现相关需要
计算规则如下:
未登录
每个session新增一个访问
登录后
每个用户每天新增一个访问
上述方案,是最佳实现中的核心思路
那么,为了更好地实现,可以通过配合Redis,进行操作,此处不再多说明