如何为网站编写高效的点击计数器
我想写一个访问计数器的脚本,用来记录网站上图片的访问次数和访问者的IP地址。每天的访问量可能有好几万次,所以这些计数器会在每秒内增加很多次。
我希望找到一种简单的、自我托管的方法(比如用php、python脚本等)。我在考虑用MySQL来记录这些数据,但我觉得可能还有更有效的方法。有什么好的计数器记录方式吗?
9 个回答
3
毫无疑问,Redis非常适合这个问题。它的安装和设置大约只需要一分钟,支持原子性增加,速度非常快,还有适用于Python、PHP(以及其他很多语言)的客户端库,并且数据持久化(有快照、日志和复制功能)。
把每个计数器存储到它自己的键里。然后只需要简单地
INCR key
4
你可以拿你的网站服务器的访问日志(比如Apache的access.log),然后定期分析这些日志(可以用定时任务),这样你就不需要在每次有人访问你的网站时立刻获取数据。
通常,访问日志是自动生成的,里面记录了请求的资源、时间、日期和用户的IP地址。这样一来,你就不需要把所有的流量都通过一个php脚本来处理。这样做简单高效,能快速统计数据。
7
这个话题真有意思。增加一个计数器,虽然看起来很简单,但它必须是一个事务……这意味着,它可能会让整个数据库锁住,时间比实际需要的还要长!这可能会成为整个系统的瓶颈。
如果你需要非常准确的计数,但不要求它们立刻更新,我最喜欢的方法是把可计数的信息记录到一个日志里(根据需要频繁切换日志,以保持数据的新鲜度)。一旦一个日志关闭(里面有成千上万的可计数事件),一个脚本就可以读取它,并在一个事务中更新所有需要更新的内容——这可能不是很直观,但比成千上万次单独锁定要快得多。
还有一些极快的计数器,它们的准确性只是统计上的——但因为你没有说这种不精确是可以接受的,所以我就不详细解释了。