PHP 高并发 统计网页点击次数

2019-03-02 00:30:15 +08:00
 hugee

一般的方法是: "UPDATE base SET hits = hits+1 WHERE id = '$id'";

一般的访问量都没什么问题,但高并发的情况下怎么做? 有什么好的方法可以实现,降低数据库的读写?

8109 次点击
所在节点    PHP
39 条回复
goodspb
2019-03-02 11:38:52 +08:00
收钱你要确定一下“高并发”的定义哦,如果是 2K 以下的 QPS,mysql 读写分离想怎么玩怎么玩~
goodspb
2019-03-02 11:39:01 +08:00
@goodspb 首先
chinvo
2019-03-02 11:46:09 +08:00
@leis1015 #16 第三方可能被投毒,比如某大炮
mrdemonson
2019-03-02 12:30:52 +08:00
高并发统计直接上数据库不好吧,应该在进数据库之前完成“高并发”,数据库只是记录最终值,过程要由上一层完成
t6attack
2019-03-02 13:32:11 +08:00
宗旨就是:尽量在内存中进行。具体实现方式,有内存数据库、缓存系统等。
还有其他姿势,比如在临时文件中计数,文件放进 /dev/shm 目录。每隔一段时间写一次数据库。
Joyboo
2019-03-02 14:19:33 +08:00
redis+woker 异步
liuguang
2019-03-02 14:40:07 +08:00
redis incr 命令
hxt
2019-03-02 14:48:16 +08:00
先用 redis 或 memcache 计数,然后计数合并,定期同步到数据库。
z5864703
2019-03-02 15:02:26 +08:00
用 Redis 实现自增和存储,如果有需要定时同步到 Mysql。
但其实可以直接用 Redis 存储就好了,没必要再同步到 Mysql,本身 Redis 就是一个数据库,比如要查询点击次数,直接查 Redis 对应 key 就好了。
whatsmyip
2019-03-02 15:47:28 +08:00
azh7138m
2019-03-02 17:00:06 +08:00
@dawniii 秀啊,这种不应该阻塞主流程的统计,我一个请求超时了咋整,万一全部超时了咋整?
opengps
2019-03-02 18:51:38 +08:00
存入缓存里,定时写入到数据库
jzmws
2019-03-02 19:12:59 +08:00
这个肯定要保存在缓存中,隔一段事件写入库中.一直写库库也是吃不消的
KasuganoSoras
2019-03-02 20:32:27 +08:00
https://github.com/kasuganosoras/SomeCodes/blob/master/v2ex_540212_client.php
https://github.com/kasuganosoras/SomeCodes/blob/master/v2ex_540212_server.php

Client 是客户端,嵌入在你的网站里,访问一次就执行一下
Server 是服务端,用命令行运行即可,然后它会每 60s 写入一次数据库
需要 Swoole 才能运行服务端

别总扯理论扯概念,拿出代码来
Talk is cheap, I show you the code.
KasuganoSoras
2019-03-02 20:39:17 +08:00
上面这个 demo,高并发应该是没问题的,要挂也是 php-fpm 先挂掉
不过高并发场景我一般选择 OpenLiteSpeed
hefish
2019-03-02 22:10:00 +08:00
肯定是用缓存啊。 先记录在缓存里,然后满到一定次数再写入数据库。。
队列的同学,不是不可以,有些折腾了。
缓存可以用文件,apcu,也可以 memcached, redis。
hugee
2019-03-03 11:49:46 +08:00
@KasuganoSoras 赞,感谢哥!
qsbaq
2019-03-05 16:51:33 +08:00
你把 IP 什么的都记录到数据库另外的表里,然后 cron 定期统计出来再 update 这个 hits。
qsbaq
2019-03-05 16:52:34 +08:00
当然用 redis 记录这些信息也行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/540212

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX