前锋PHP的大并发集群技术,高并发下,php、swoole与redis实现的秒杀功能
/**
* 改良版 利用swoole的Channel通道* 协程下 秒杀案例(5000次请求 并发1000) ab -n 5000 -c 1000 http://192.168.99.100:9555/order/skill
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function skill()
{
$container = ApplicationContext::getContainer();
$redis = $container->get(Redis::class);
co(function () use ($redis) {
$chan = new Channel(1);
co(function () use ($chan, $redis) {
$key = 'sku_id';
$count = $redis->lPop($key);
$chan->push($count);
});
co(function () use ($chan, $redis) {
$chanData = $chan->pop();
if (!$chanData) {
$this->log('库存为0,已售罄', 0);
} else {
$sku_id = 11;
// 插入订单
$order_sn = getIdGenerator();
$data = [
'order_sn' => $order_sn,
'user_id' => 1,
'goods_id' => 1,
'sku_id' => 11,
'price' => 10
];
$sql2 = "update mall_test_store set number=number-1 where sku_id='{$sku_id}'";
if (Db::table('test_order')->insert($data) && DB::update($sql2)) {
$this->log('下单成功', 1);
} else {
$this->log('下单失败', -1);
}
}
});
});
}
// 设置redis
private function setkey($key, $count)
{
$container = ApplicationContext::getContainer();
$redis = $container->get(Redis::class);
for ($i = 0; $i < $count; $i++) {
$redis->lPush($key, 1);
}
}
//记录日志
private function log($event, $type = 0)
{
$sql = "insert into mall_test_log(event,type)values('{$event}','{$type}')";
Db::insert($sql);
var_dump($event);
}
// 初始化所有变量
public function clean()
{
$sku_id = 11;
Db::delete("truncate table mall_test_log");
Db::delete("truncate table mall_test_order");
Db::update("update mall_test_store set number=1000 where sku_id='{$sku_id}'");
// 在redis中设置一下sku的数量。
$this->setkey('sku_id', 1000);
}
前锋PHP的大并发集群技术,高并发下,php、swoole与redis实现的秒杀功能相关推荐
- linux集群课程,超全Linux集群技术高俊峰-实战式教学视频课程(43讲全)
超全Linux集群技术高俊峰-实战式教学视频课程(43讲全) 1.jpg (63.6 KB, 下载次数: 0) 2016-4-27 11:41 上传 1.jpg (38.51 KB, 下载次数: 0) ...
- 【Redis集群专题】「集群技术三部曲」介绍一下常用的Redis集群机制方案的原理和指南(入门篇)
集群化的方案 Redis的Sentinel解决了主从复制故障不能自动迁移的问题,但是主节点的写性能和存储能力依然是受到了Redis单机容量有限的限制,所以使用Redis集群去解决这个问题,将Redis ...
- 大型互联网架构与集群技术
java架构必须掌握的几点技术? 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation注 ...
- 数据库集群技术(转载)
用来保存计算最终结果的 数据库是整个信息系统的重要组成部分, 技术也相对成熟.然而,对于所有数据库而言,除了记录正确的 处理结果之外,也面临着一些挑战:如何提高处理速度,数据可用性.数据安全性和数据集 ...
- Linux 集群技术
一. 集群概念 集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库.Web服务和文件服务等)的单一客户视图,同时提供接近容错 ...
- 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析
秒杀购物商城业务服务-分布式架构介绍 基于MySQL数据库集群技术实现服务的高可用 基于Tomcat的集群负载机制实现Tomcat服务器的高可用 基于Nginx负载均衡机制实现负载均衡(介绍和配置) ...
- 负载均衡集群技术LVS
集群 通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,任务调度是集群系统的核心技术. 集群组成后,利用多个交换机和组合进行海量请求处理(负载均衡),从而获得很高 ...
- 深入讲解服务器集群技术
在发展初期,一路处理器便可为一台服务器及其所有应用提供动力.接着就发展到了多处理时代,这时两路或多路处理器共享一个存储池,并能处理更多更大的应用.然后出现了服务器网络,该网络中的每台服务器都专门处理不 ...
- EJB应用服务器集群技术分析
J2EE平台提供了一个基于组件的方法,用来设计.开发.装配及部署企业应用程序.而且提供了一个多层的分布式的应用模型.组件的复用.一致化的安全模型以及灵活的事务控制模型.近年来在企业系统中得到了大量使用 ...
最新文章
- 微信 小程序组件 搜索分类 带缓存(终极 上线版)
- 使用WinSCP上传文件到指定服务器
- Jrebel最新激活破解方式
- asp.net学习资源列表
- 2022博客整理之感言
- python画roc曲线需要什么数据,我如何根据这些数据绘制ROC曲线?
- java pdf 类库_有哪些可以给pdf加水印,java第三方开源类库?
- C# ASP.NET 权限设计 完全支持多数据库多语言包的通用权限管理系统组件源码
- mybatis-generator配置流程(详细) 2021-05-15
- pandoc讲html转换为pdf,将HTML表格转换为PDF的Pandoc会导致非包装表格
- jquery扩展与插件
- ascii码与键盘代码的区别
- 中国纺织行业前景动态分析与投资战略研究报告2022-2028年
- c语言答辩ppt案例,c语言ppt例子课题了答辩ppt成品中南民族大学.ppt
- Boosting原理学习
- 登录邮恰显示服务器登录失败,邮洽邮箱收不到邮件是什么原因?
- file_get_contents() 报错failed to open stream: HTTP request failed! HTTP/1.1 505 HTTP Version Not Supp
- 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念
- 《响应式Web设计性能优化》一2.3 Web运行时性能
- 2022泰迪杯数据分析技能赛B题方案及赛后总结:银行客户忠诚度分析
热门文章
- 【Python入门教程】第36篇 可遍历对象与迭代器
- 多进程Twemproxy
- Linux命令之lsblk命令
- 怎样升级oppo手机android版本,OPPO R9手机全网通版升级ColorOS 3.0:基于安卓6.0
- 你对未来计算机有什么期待,一起脑洞大开:你希望未来手机增添什么功能
- 华为荣耀android进入,抱团升级:华为/荣耀共四款机型开启Android 9内部测试
- uniapp实现支付功能
- 常州市住房公积金管理中心:美创防水坝守护数据安全
- 时间、时间戳、带格式时间的转换
- 未来十年,互联网将如何颠覆这17个传统行业,你知道吗?