本文用到的知识点须要提前安装redis,php如何安装redis请看之前的文章。

windows下给php安装redis扩展,并把redis单独注册为做事

场景:在某个韶光点对商品goods_id=2的商品进行抢购,商品库存为10

php秒杀实现php若何实现秒杀功效phpredis模仿简略抢购场景快来看看吧 JavaScript

建立商品goods_id=2的库存抢购列表

首先创建待抢购商品的list列表,如果有人抢购成功就移除一个,直到列表为空则表示抢购完成。

//1、连接redis数据库$redis = new Redis();$redis-&gt;connect('127.0.0.1', 6379);$redis_name = 'goods_id_2';//比如商品id=2的商品参与秒杀//2、仿照抢购,库存为10,将库存放到redis中$num = 10;for($i=0;$i<$num;$i++){$redis->lPush($redis_name,1);//这里用某个商品的ID作为标识}echo "实行成功";

客户端进行仿照抢购

//1、连接redis数据库$redis = new Redis();$redis->connect('127.0.0.1', 6379);$redis_name = 'goods_id_2';//比如商品id=2的商品参与秒杀//3、仿照用户要求,随机获取10名用户表示抢购成功for($i=0;$i<100;$i++){$user_id = rand(100,999);$len = $redis->lLen($redis_name);$str = "";if(!$len || $len<=0){$str .= $user_id."抢购已结束";break;}else{$redis_user_name = "goods_id_2_user_id";//判断抢购列表中是否已存在该用户,获取列表中所有的数据$skill_list = $redis->lrange($redis_user_name, 0, -1);if(in_array($user_id, $skill_list)){$str .= $user_id."请勿重复提交";}else{$redis->rPop($redis_name);$redis->lPush($redis_user_name,$user_id."_".ceil(microtime(true)1000));$str .= $user_id."已抢到";}}file_put_contents("D:/wwwroot/test/skill/cron.txt", $str."\r\n",FILE_APPEND);}echo '实行完成';

做事端实行行列步队处理,将redis中已抢购的用户保存到数据库中

<?php$mysql_server_name = 'localhost'; //改本钱身的mysql数据库做事器$mysql_username = 'root'; //改本钱身的mysql数据库用户名$mysql_password = '123456'; //改本钱身的mysql数据库密码$mysql_database = 'test'; //改本钱身的mysql数据库名$conn=mysqli_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_database); //连接数据库//连接数据库缺点提示if (mysqli_connect_errno($conn)) {die("连接 MySQL 失落败: " . mysqli_connect_error());}mysqli_query($conn,"set names utf8"); //数据库编码格式//1、连接redis数据库$redis = new Redis();$redis->connect('127.0.0.1', 6379);$redis_name = 'goods_id_2';//比如商品id=2的商品参与秒杀//2、将list行列步队中的数据读取出来然后实行入库$redis_user_name = "goods_id_2_user_id";while(true){//判断抢购列表中是否已存在该用户,获取列表中所有的数据$result = $redis->rpop($redis_user_name);if($result){$skill_arr = array_filter(explode("_", $result));$sql = "insert into skill (user_id,timestamp) values({$skill_arr[0]},{$skill_arr[1]})";mysqli_query($conn,$sql); }}echo "实行成功";

以上便是大略实现秒杀的场景,详细的代码还要根据实际的逻辑进行调度。

你学会了吗,赶紧点赞收藏试一试吧。

我是小程序软件开拓,每天分享开拓过程中碰着的知识点,如果对你有帮助的话,帮忙点个赞再走呗,非常感谢。

往期文章分享:

windows下安装php+apache的运行环境,并把apache单独注册为做事

telnet命令你理解多少?除了可以验证端口,还可以仿照邮件发送