/**

* 改良版 利用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实现的秒杀功能相关推荐

  1. linux集群课程,超全Linux集群技术高俊峰-实战式教学视频课程(43讲全)

    超全Linux集群技术高俊峰-实战式教学视频课程(43讲全) 1.jpg (63.6 KB, 下载次数: 0) 2016-4-27 11:41 上传 1.jpg (38.51 KB, 下载次数: 0) ...

  2. 【Redis集群专题】「集群技术三部曲」介绍一下常用的Redis集群机制方案的原理和指南(入门篇)

    集群化的方案 Redis的Sentinel解决了主从复制故障不能自动迁移的问题,但是主节点的写性能和存储能力依然是受到了Redis单机容量有限的限制,所以使用Redis集群去解决这个问题,将Redis ...

  3. 大型互联网架构与集群技术

    java架构必须掌握的几点技术? 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation注 ...

  4. 数据库集群技术(转载)

    用来保存计算最终结果的 数据库是整个信息系统的重要组成部分, 技术也相对成熟.然而,对于所有数据库而言,除了记录正确的 处理结果之外,也面临着一些挑战:如何提高处理速度,数据可用性.数据安全性和数据集 ...

  5. Linux 集群技术

    一. 集群概念 集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库.Web服务和文件服务等)的单一客户视图,同时提供接近容错 ...

  6. 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析

    秒杀购物商城业务服务-分布式架构介绍 基于MySQL数据库集群技术实现服务的高可用 基于Tomcat的集群负载机制实现Tomcat服务器的高可用 基于Nginx负载均衡机制实现负载均衡(介绍和配置) ...

  7. 负载均衡集群技术LVS

    集群 通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,任务调度是集群系统的核心技术. 集群组成后,利用多个交换机和组合进行海量请求处理(负载均衡),从而获得很高 ...

  8. 深入讲解服务器集群技术

    在发展初期,一路处理器便可为一台服务器及其所有应用提供动力.接着就发展到了多处理时代,这时两路或多路处理器共享一个存储池,并能处理更多更大的应用.然后出现了服务器网络,该网络中的每台服务器都专门处理不 ...

  9. EJB应用服务器集群技术分析

    J2EE平台提供了一个基于组件的方法,用来设计.开发.装配及部署企业应用程序.而且提供了一个多层的分布式的应用模型.组件的复用.一致化的安全模型以及灵活的事务控制模型.近年来在企业系统中得到了大量使用 ...

最新文章

  1. 微信 小程序组件 搜索分类 带缓存(终极 上线版)
  2. 使用WinSCP上传文件到指定服务器
  3. Jrebel最新激活破解方式
  4. asp.net学习资源列表
  5. 2022博客整理之感言
  6. python画roc曲线需要什么数据,我如何根据这些数据绘制ROC曲线?
  7. java pdf 类库_有哪些可以给pdf加水印,java第三方开源类库?
  8. C# ASP.NET 权限设计 完全支持多数据库多语言包的通用权限管理系统组件源码
  9. mybatis-generator配置流程(详细) 2021-05-15
  10. pandoc讲html转换为pdf,将HTML表格转换为PDF的Pandoc会导致非包装表格
  11. jquery扩展与插件
  12. ascii码与键盘代码的区别
  13. 中国纺织行业前景动态分析与投资战略研究报告2022-2028年
  14. c语言答辩ppt案例,c语言ppt例子课题了答辩ppt成品中南民族大学.ppt
  15. Boosting原理学习
  16. 登录邮恰显示服务器登录失败,邮洽邮箱收不到邮件是什么原因?
  17. file_get_contents() 报错failed to open stream: HTTP request failed! HTTP/1.1 505 HTTP Version Not Supp
  18. 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念
  19. 《响应式Web设计性能优化》一2.3 Web运行时性能
  20. 2022泰迪杯数据分析技能赛B题方案及赛后总结:银行客户忠诚度分析

热门文章

  1. 【Python入门教程】第36篇 可遍历对象与迭代器
  2. 多进程Twemproxy
  3. Linux命令之lsblk命令
  4. 怎样升级oppo手机android版本,OPPO R9手机全网通版升级ColorOS 3.0:基于安卓6.0
  5. 你对未来计算机有什么期待,一起脑洞大开:你希望未来手机增添什么功能
  6. 华为荣耀android进入,抱团升级:华为/荣耀共四款机型开启Android 9内部测试
  7. uniapp实现支付功能
  8. 常州市住房公积金管理中心:美创防水坝守护数据安全
  9. 时间、时间戳、带格式时间的转换
  10. 未来十年,互联网将如何颠覆这17个传统行业,你知道吗?