nginx+redis队列做统计系统

来源:互联网 发布:剑侠情缘手游网络异常 编辑:程序博客网 时间:2024/06/05 11:24


location /echo {

set $access '$arg_uid-$arg_pf-$arg_tm-$remote_addr-$http_x_forwarded_for-"$http_user_agent"-$http_referer-$request';

echo $access;

}

location /stat {

set $access '$arg_uid-$arg_pf-$arg_tm-$remote_addr-$http_x_forwarded_for-"$http_user_agent"-$http_referer-$request';

redis2_query lpush stat $access;

redis2_pass 127.0.0.1:6379;

}

再使用redis的C API和MYSQL的C API建立链接。多线程LPOP转移redis队列中数据到MYSQL。进行异步运算。一个统计入库就OK了。

这个里面有几个问题

1:不能把redis队列压爆了,需要多线程程序快速转移到MYSQL,最好是长链多线程接执行。

2:C并非唯一转移方案。C++/JAVA都可以。只要是多线程高效的就OK。需要判断数据是否合乎规则。

3:我原来测试的时候没有找到在nginx配置文件中的取得系统时间,这个可以放在多线程程序中。或者通过http GET方式传递过来。

如果谁找到了可以留言给我。谢谢先。($time_local编译时会出错。nginx: [emerg] unknown "time_local" variable)

4:统计最难的是异步运算机制,数据入库非常简单。具体方案就不再公开了。

5:方案不唯一,nginx_lua可以替代HttpRedis2Module半把判断数据是否合乎规则放进去。不过不建议这样做。

我没有好的理由说明,只是不方便维护。数据是否合乎规则是在不停的变化着。放在nginx配置文件维护不方便。队列组合也不唯一。

可以使用httpsqs/nginx/其他。队列数据库不唯一,ttserver/redis/其他都可以。

综合考虑nginx+redisHttpRedis2Module/nginx+tt server HttpmemcModule/httpsqs+tt server/sqsdb

各方案的高效性能和稳定性还是建议使用nginx+redisHttpRedis2Module。

有许多好方案,但合适的才是最好的。比如我善长用PHP但PHP来做这些并不太适合。HttpRedis2Module和nginx lua比PHP更高效。