php如何解决高并发下的全局累计计数问题?

php中文网
发布: 2016-06-06 20:17:08
原创
2014人浏览过

有这样一个需求,有一个高并发的网站,网站想拦截来自浏览器的请求,记录每个请求的某些信息并写入文件(不是写入数据库,如果写入数据库的话直接通过ID递增就可以实现了,事实上并不是),对于每个请求都要有一个编号。编号从0000~9999循环,因为网站载流量大的情况下会出现高并发的问题,我应该采取什么方式来记录这个编号?

想过这些方案

  • 使用全局变量,感觉有点危险,而且不稳定。

  • 采用数据库来计数,可以实现数字的累加,当然要对数据库加事务锁,不加的话会出现死锁,但是这样在高并发的状态下,就会使数据库的压力变的很大,会造成响应延迟,甚至崩溃

  • 采用文件来记录数字,这个和上面的数据库记录的方式大同小异,存在同样的问题

    Sail!企业网站管理系统简体中文版1.2
    Sail!企业网站管理系统简体中文版1.2

    Sail企业网站管理系统(以下称Sail)是一个基于PHP+Mysql架构的企业网站管理系统。Sail 采用模块化方式开发,功能强大灵活易于扩展,并且完全开放源代码,面向大中型站点提供重量级企业网站建设解决方案。2年来,凭借Silence长期积累的丰富的Web开发及数据库经验和勇于创新追求完美的设计理念,使得Sail得到了很多公司和网站的认可,并且越来越多地被应用到大中型商业网站主要功能:单页、文

    Sail!企业网站管理系统简体中文版1.2 0
    查看详情 Sail!企业网站管理系统简体中文版1.2
  • 引入redis来记录,redis缓存技术中变量的递增是原子操作,可以实现数字的累加,不会出现死锁,而且速度很快,按理说是最好的办法,但是目前在使用redis方面遇到了一点问题

    立即学习PHP免费学习笔记(深入)”;

所以在这里想请教一下大家,对于高并发网站的全局数字累计记录,大家有什么更好的方案?

回复内容:

有这样一个需求,有一个高并发的网站,网站想拦截来自浏览器的请求,记录每个请求的某些信息并写入文件(不是写入数据库,如果写入数据库的话直接通过ID递增就可以实现了,事实上并不是),对于每个请求都要有一个编号。编号从0000~9999循环,因为网站载流量大的情况下会出现高并发的问题,我应该采取什么方式来记录这个编号?

想过这些方案

  • 使用全局变量,感觉有点危险,而且不稳定。

  • 采用数据库来计数,可以实现数字的累加,当然要对数据库加事务锁,不加的话会出现死锁,但是这样在高并发的状态下,就会使数据库的压力变的很大,会造成响应延迟,甚至崩溃

  • 采用文件来记录数字,这个和上面的数据库记录的方式大同小异,存在同样的问题

  • 引入redis来记录,redis缓存技术中变量的递增是原子操作,可以实现数字的累加,不会出现死锁,而且速度很快,按理说是最好的办法,但是目前在使用redis方面遇到了一点问题

    立即学习PHP免费学习笔记(深入)”;

所以在这里想请教一下大家,对于高并发网站的全局数字累计记录,大家有什么更好的方案?

  1. 内存性数据库,诸如redis,memcache也行,是最好的选择也是最快的首选的选择,不清楚楼主遇到了什么技术问题

  2. 毫无疑问,纯php解决不了这个问题的,引入swoole扩展吧,使用swoole的atomic类,可以是实现多进程原子无锁累加计数

  3. 自己开发...

每个请求都要有一个编号。

编号从0000~9999循环 必须么,不必须的话,建议用 uuid

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号