大家应该都知道,秒杀为啥 用 异步队列 这种形式来处理吧?哈哈 因为我们写的程序功能之前常理都是 用户请求到后台,后台操作数据库进行实现相应功能。
上边说道 用户 --> 后台服务器逻辑 -->数据库
那么这样的模式 如果用在秒杀上, 同时间 高并发来临,后台服务器逻辑操作数据库 一定是数据库 扛不住的时候,他已经就高潮了信不?
所以我们 如何让服务器不瘫痪的实现秒杀咧?
就要使用我们 的一种快、高效 避免数据库受到 高并发的请求处理;
实现思路:
1、在做一个 商品 开启秒杀活动前,将数据库中该商品的库存 同步到我们的内容缓冲中例如 redis 、memcache 中;
2、然后 同时在redis、memcache内容缓冲中 构建我们的消息队列A(其实也就是一块命名了的 资源空间) 用来存放 客户端的请求;
3、构建 处理 2 中的队列数据 将处理的结果 放入另一个 队列B中(例如 通过脚本 while() sleep 实现队列A处理后 结果再放入队列B);
4、客户端点击秒杀后,js等客户端 启动隔时 请求,去队列B中找自己是不是被处理 以及处理的结果到底是个毛线 拿回来;
5、定时将 缓冲 中的商品库存等信息 再同步回数据库中
OK 几句话是否点通了你?
实现脚本图:
0.php 将数据库商品库存同步 缓冲中一份;
1.php 处理消息队列A 的入队(用户的请求);
2.php while sleep脚本启动,出队A中的请求逐个处理 并将结果存入队列B;
3.php 处理客户端 定时请求读取结果 队列B中检索;
4.html 定时请求3.php;
5.php 定时将缓冲商品信息同步回数据库中
OK
以上,自己实现过一个例子,仅供参考
新闻热点
疑难解答