php 秒杀 高并发 教程笔记
url
https://coding.imooc.com/class/148.html
简单介绍
前五章一直在用原生的php来实现一个简单的秒杀系统
第六七章又强调了下各个不同量级的秒杀对于系统的不同要求
第八章开始讲正题 单机性能提升 1,2,3都是常规方法
4开始从提高接口速度出发
主要是利用redis
第九章 分布式 基本就是在念ppt
主要应对手段
探针类
找到某些function或者sql的耗时
web服务器
- lvs 随时扩展 集群
- cdn
- 动态变静态
db
- redis
其他
网络之间的消耗
第八章 优化单机性能
启用gzip压缩
image.png减少资源请求数量,合并压缩css js
minify 去掉回车,空格 ,多文件整合
php项目 url
code.google.com/p/minify
nginx配置文件缓存
配置expires
expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求
要配置expires,可以在http段中或者server段中或者location段中加入
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
root /var/www/img/;
expires 30d;
}
控制图片等过期时间为30天,当然这个时间可以设置的更长。具体视情况而定
比如
location ~ \.(wma|wmv|asf|mp3|mmf|zip|rar|swf|flv)$ {
root /var/www/upload/;
expires max;
}
expires 指令可以控制 HTTP 应答中的“ Expires ”和“ Cache-Control ”的头标(起到控制页面缓存的作用)
语法:expires [time|epoch|max|pff]
默认值:off
expires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用
time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。
time值还控制"Cache-Control"的值:
负数表示no-cache
正数或零表示max-age=time
image.png
提高接口速度
- 将接口静态化
- 快速终止的逻辑放在前面
利用nginx的rwrite功能,在秒杀时正常进逻辑,在秒杀结束后,没有库存等,直接显示秒杀结束的静态页面,让他们减少请求
- 数据库索引,一定不能少,更不能乱
- 减少数据规模 每次秒杀新建一张专用表
- 将数据放到redis缓存中
我的理解,其实就是简单的为每个秒杀开个专用redis缓存,存储订单信息,商品信息等,等到秒杀结束后,再用个batch把redis里面的信息写到mysql中么?
从代码中可以看出,以上猜想不成立
实际上是每次都去读写redis,如果redis判断没有问题再去读写mysql
image.png image.png image.png