1. 用php编写支持高并发的网站,需要做什么处理
PHP语言开发高并发的网站,需要加缓存,复杂逻辑走消息队列异步处理,mysql查询必须走索引,还搞不定就加机器分流,mysql配置升高并且一主多从,使用codis集群,增加消息队列的消费者,如果还搞不定就随机拒绝请求,当然这是最后的退路。
缓存
缓存是避免业务查询过多的请求mysql,导致业务不可用,段氏根据场景来判断是否需要使用codis集群,如果并发量没有达到某个级别,16G的redis也可以,但是要避免redis在高并发下容易发生的缓存穿透,尽量做成高可用,并保证缓存实现的命中率。
消息队列
这也是高并发情境下的杀手锏,削峰填谷,将耗时的业务逻辑直接以队列的形式异步慢慢处理,防止请求过度积压,导致的服务器不可用。
mysql优化
有些场景下必须查询mysql的,也应该走索引,避免多表联合查询,甚至mysql的事务隔离级别都尽量的降低,或者直接去掉事务,采用最终一致性的补偿指明机制。升级mysql的配置,核心数和内存的提升对查询速度的优化是显而易见的,最好能一步到位的走一主多从,查询路由到从服务器上。
随机拒绝请求
这不是开玩笑,我们必须保证服务器可用,宁愿拒绝掉一些请求,也不能让服务器大量请求阻塞握逗散,最终导致大家都用不了。
2. 用PHP 编写支持高并发的网站,需要做什么处理
PHP支持高并发很多时候不是光靠PHP的。具体根据你的业务逻辑,下面列一些例子:
数据库层面,表结构必须合理,尽量避免联表查询,能够缩短处理时间
配置额外图片服务器或使用cdn,降低服务器压力
使用缓存处理类似抢购、投票等高并发请求,如redis。
消息队列处理耗时较久的请求,如发邮件等
必要时使用多台服务器,后台使用一台,前台可将高并发的业务与其他分开,避免因其中一个业务导致全部崩溃
3. PHP高并发下单用事务可以解决吗
事物不是解决高并发的。事物是为了一个操作的完整性才使用的。
php的高并发在我看主要以来php脚本的执行速度,以及对数据库的数据访问的次数,还有缓存系统的使用(包括数据缓存以及模板缓存),系统架构的优化。
还有就是web服务器做负载均衡,域名cdn做负载均衡等。
4. PHP 缃戠珯濡备綍瑙e喅缃戠珯澶ф祦閲忋侀珮骞跺彂镄勯梾棰桡纻
memcache,椤甸溃闱欐佸寲锛屽瑰浐瀹氢笉鍙樼殑椤甸溃閲囩敤闱欐佸勭悊锛屽规暟鎹搴挞珮骞堕潪锛岄珮璁块梾锛岄噰鍙杕emcache鎶链锛屽噺杞诲规暟鎹搴撶殑璁块梾銆
5. php redis高并发rpush是数据一致性吗
不会,这里的原子性不要从php的角度看,应该从redis的角度看,同一个redis节点对并发的请求都是序列化处理的,所以单操作不存在你担心的并发问题,但如果是read & write的形式到哪里都不行了,切记。
有人问到read & write是啥,其实就是并发的一个经典问题,代码如下
$v = $redisClient->get('v');
$v ++;
$redisClient->set('v', $v);
就是先读取数据,再修改数据,在写回修改,这里是希望每次访问都递增v的值,但在并发情况下,两个进程都读取到了一样的初始值,比如3,然后都加1变为4,最后把4写回Redis,这种情况就会统计数据比实际的少。尽量都用Redis的原子操作就好,比如incr。