计数器结合memcache

张映 发表于 2010-11-02

分类目录: php

标签:, ,

什么是计数器,这篇博文讲的计数器是用于记录访问网站页面的次数,独立ip数,或者根据一定的规定来统计页面访问数等。下面是曾经做过的一次计数器,下面是一个简单的流程。

计数器

计数器构思

要实现上面的流程要做到一下几步:

1,在页面的共用模块,或者共用文件中加上一个计数接口。

有的人做计数器是这样的,有一个计数的接口,但是呢需要在每个页面中加上这个接口,如果有100个页面,是不是要加一百个呢?每个页面加一个,到是很符合统计页面的思想,但是这样会加大工作量的,所以要尽量免费每个页面去加接口。

2,引入memcache

为什么要引入memcache呢?我们来看一下传统的计数器,或者是从网上下的计数器,都有一个共同特点。举个例子来说,一个用户访问了页面A,程序会去数据库判断一下,这个IP有没有访问过该页面,如果没有,在数据库表中新建一条,如果有看看是不是在規定的无效期内,如果在,不作处理,如果不在,访问次数加1,到这儿访问A页面的计数器工作结束,接着又访问了B页面,也做同样的处理。也就是说不管我点什么页面都要对数据库进行操作,这样大大的加大了数据库的负担,并且数据库又是特别容易产生瓶颈的地方。

如果引入了memcache,我们就可以减少对数据库的查询。举例来说明,一个用户访问了页面A,程序去到memcache查看一下KEY=>VALUE有没有对应的值,如果没有,在数据库表新建一条,然后在memecache中建一个KEY=>VALUE的值,如果有,查看一下是不是在规定的无效时间内,如果在,不作处理,如果不在,更新数据库访问次数加1,更新memcache中所对应KEY=>VALUE中的时间。这样操作后,前端记录数据时,只有插入,更新操作,没有查询操作,并且查询操作占了很大一部分数据库连接。用memcache更快,直接从内存中读取数据。

解释一下上面提到的规定的无效时间:我现在规定一个时间段为半个小时,一个用户访问了A页面,在5分钟之后又来访问页面A,或者是直接按F5进行刷新,这样是算做一条呢,还是算做多条呢。我处理的方式是一条,这样使页面的统计更加的准确。如果把这个时间设置成为一天,那么页面访问数根该页面一天的独立IP统计就是一个值了。

3,数据库设计端

a),ip和页面关系表

b),页面记录表

c),以天为记录的页面统计表

d),用户和页面访问关系表

有了上面四个表,基本上可以满足页面统计的要求了。

a表用于记录ip和页面访问的关系,以及最后访问的时间;b表用于记录每个页面访问的次数。c表用于统计页面每天的
访问总量。d表用于登录用户访问页面的记录,有的公司会要求要这个统计,因为在线用户一般都是活跃用户,比较有价值的用户。

什么东西都说说挺容易的,做起来就没那么容易了,不过有了指导思想,做起来也不会有那么困难了。



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/php/1082.html

1 条评论

  1. 熊猫家族 留言

    不错的思路