首页 » SEO优化 » phplua扩大技巧_win10phpluadockerredisAB测试实现商品秒杀代码实现

phplua扩大技巧_win10phpluadockerredisAB测试实现商品秒杀代码实现

访客 2024-11-09 0

扫一扫用手机浏览

文章目录 [+]

本日就用实际代码来实现一下秒杀任务大略实现,个人认为节制这个方法,口试PHP中级,15K-20K基本稳妥的。

开拓环境如标题,window10,某个造诣1亿人的技能网站调查显示大部分人还是用windows开拓。
后端措辞用的PHP7.3,redis我是用的docker desktop安装的redis6.x,windows本地也能装,由于本地我要安装redis集群,以是就有docker安装redis了,redis6在windows上还不支持集群。

phplua扩大技巧_win10phpluadockerredisAB测试实现商品秒杀代码实现

性能测试工具用的AB,做事器上可以用wrk性能测试;好了,这些环境的搭建我就不细说了,低级开拓的话这些工具安装该当得心应手了。

phplua扩大技巧_win10phpluadockerredisAB测试实现商品秒杀代码实现
(图片来自网络侵删)

直接贴代码,展示测试结果:

<?php$redis = new \Redis();$redis->connect('127.0.0.1',6379);//加锁,分布式锁,设置库存为1000$redis->setnx('stock',1000);//仿照用户ID$user_id = rand(10000,1000000);//lua脚本,非常大略$lua = <<<SCRIPT local userId = KEYS[1]; local goodKey = KEYS[2]; local stock = KEYS[3]; local userExit = redis.call("sismember",goodKey,userId); if tonumber(userExit) == 1 then return 2; end local num = redis.call("get",stock); if tonumber(num) <= 0 then return 2; else redis.call("decr",stock); redis.call("sadd",goodKey,userId); end return 1;SCRIPT;//eval实行lua脚本$result = $redis->eval($lua,[$user_id,'goods_id','stock'],3);if ($result == 1) { echo '秒杀成功';} else { echo '秒杀失落败';}

docker中的redis,端口6379,RDM工具可以直接连接到docker中的redis

RDM 连接redis

AB压测工具,压缩包下载放到本地,解压就可以利用,无需安装

cmd进入AB的bin目录,实行命令

ab -n 10000 -c 200 -k "http://wt.local.com/index.php"

大略阐明下,-n后面参数是要求次数,-c并发数,同时发送要求数,当作果

存了1000个用户id,stock库存为0,没有超卖,符合秒杀哀求

再看下压测结果

最主要的参数便是Requests per second 381.8也便是QPS,每秒要求数。
个人认为中小公司完备够用了。

当然我这段实例代码是原生的,没有利用框架,生产的秒杀业务不可能这么大略,比如JWT校验,各种规则验证,源于这些会导致接口的性能低落。
最少这能办理中小流量的并发抢购,且不超卖业务。

乐不雅观一点说,我这是本地测试,redis用的是虚拟机,比较生产的linux环境或多或少性能要差点。

我司用了redis主从就够了,大公司会用到redis集群,我在docker中也安装了集群。
后续我用redis集群来实现秒杀,看看性能。

win10+docker+redis集群

php 操作redis有两种办法,一种是

<?php$redis_config = ['127.0.0.1:6379','127.0.0.1:6380','127.0.0.1:6381'];$redis = new \RedisCluster(null,$redis_config);

另一种composer安装predis扩展

<?phpnamespace backend\controllers;use Predis\Client;class TestController extends BaseController{ public function actionIndex() { $redis_config = [ 'tcp://127.0.0.1:6379', 'tcp://127.0.0.1.2:6380', 'tcp://127.0.0.1.3:6381' ]; $redis = new Client($redis_config, ['cluster' => 'redis']); }}

后续测试下集群秒杀的性能,以及golang实现秒杀,不敷之处,请批评示正

标签:

相关文章

今日头条算法岗三面算法工程师的面试之路

大数据和人工智能技术逐渐成为各行各业的热门话题。今日头条作为中国领先的资讯平台,其算法岗位一直是求职者争相竞逐的焦点。本文将针对今...

SEO优化 2025-01-31 阅读1 评论0

今日头条算法如何打造个化内容推荐

在移动互联网时代,信息爆炸已成为常态。如何在海量信息中找到自己感兴趣的内容,成为了一个亟待解决的问题。今日头条作为一款备受瞩目的新...

SEO优化 2025-01-31 阅读1 评论0

今日头条算法推荐其弊端与反思

算法推荐已经成为各大平台的核心竞争力。今日头条作为国内领先的资讯平台,凭借其强大的算法推荐系统,吸引了大量用户。在享受算法带来的便...

SEO优化 2025-01-31 阅读1 评论0

今日头条算法思维导图信息推荐的奥秘

信息传播速度越来越快,用户对信息的需求也越来越多样化。今日头条作为一款备受关注的新闻资讯平台,其背后的算法推荐机制一直是业界关注的...

SEO优化 2025-01-31 阅读1 评论0