因为公司需要,要我统计每个用户在网页上的点击状况,进了那些链接。公司网站访问量大概是100多万ip 800w pv 。在最开始使用了memcache来缓存用户的点击,当点击次数达到一定数量的时候,才写入数据库。 但是由于并发的原因,造成了多php进程同时写入数据库的问题,数据很多重复。现在我和同事有两种方案,第一种他的是,在memcache中建立多个数组,存放缓存数据,单个数组不能大于1M。然后用独立的一个php进程来做计划任务,定时取memcache中的数组,来执行入库。第二种我的,就是使用文件缓存,在memcache中点击次数满上限,就把数据存入文件中,清空memcache。然后同样用一个独立的进程来执行入库操作。我们该选哪种呢?

解决方案 »

  1.   

    既然要入库,又何必用文件缓存呢?
    在memcache中点击次数满上限,就把数据执行入库操作,清空memcache
      

  2.   

    回楼上,因为是高并发的,已经出现过了问题了,直接到上限就入库的话,当数据库还没执行完,后面的访客来了,memcache还未被清空,后面的进程也会执行入库操作。
      

  3.   

    memcache达到最大限度后。将memcache缓存的值赋给一个变量。然后马上清空memcache。然后将变量里面的数组做入库处理。这样通过一个变量的转移,一定比你直接入库时间要短,也许可以解决问题。
      

  4.   

    views%50==0 操作一次数据库。不用清空。
      

  5.   

    memcache达到上限的时候,不要急着入库,应该重新创建一个 memcache 缓存。可以这样来理解:一共有两个 memcache 缓存,一个正在工作,另一个在后面等着。当前面的那个工作到一定限度了,那就扯下来,另一个上。典型的换班。。不知道这样能否解决你的问题