Redis之 和 tp3.2 模拟秒杀过程

本文详细介绍如何利用Redis的LPUSH和LLEN命令实现商品秒杀功能,通过限制参与秒杀的人数,确保库存准确控制,同时展示如何读取秒杀结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请,先打开 redis 服务

参考网址 https://blog.youkuaiyun.com/jachinfang/article/details/91038623
在这里插入图片描述
tp3.2 中

1   执行秒杀过程

<?php

namespace Wxapi\Controller;
use Common\Controller\HomebaseController;

//  lLen 返回列表长度
//  Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作

// 抢购开始,设置库存的缓存周期
// 设定1个key的活动时间(s)
// $redis->setTimeout('goods_store',60);    // 设置缓存周期,超时,释放锁,即删除键值对

class TestController extends HomebaseController{

public function index(){

	$redis = new \Redis();
	$redis->connect('127.0.0.1',6379);

	//秒杀人数
	$num = 10;
	// 队列名称
	$redis_name = 'miaosha';
	for ($i=0; $i <100 ; $i++) {            // 限制参加秒杀的人,只有100人能入场

		$uid = rand(10000,99999);
		
		echo ($redis->lLen($redis_name));

		// 如果 miaosha 列表的长度<10,执行秒杀过程,不过不 flushall 的话,
		redis 缓存里面就有值,
		第1次刷新的时候,redis里面有10个值秒杀成功,
		第2次刷新的话,就没有成功的了,
		因为miaosha 里面已经有10个人了,
		除非修改下面的临界值,新增人数,才可以继续有人秒杀成功

		if($redis->lLen($redis_name)<=10){ 

			$redis->lPush($redis_name,$uid.'%'.microtime());

			echo '<br>';
			echo $uid.'秒杀成功';
		}else{
			echo '<br>';
			echo $i.'--'.'秒杀结束';
		}

	}

	$redis->close();
}

}


2  打印秒杀结果

	$redis = new \Redis();
	$redis->connect('127.0.0.1',6379);
	//秒杀人数
	$num = 10;
	// 队列名称
	$redis_name = 'miaosha';
	$data = $redis->lrange($redis_name,0,-1);      

	echo '<pre>';
	print_r($data);    // 打印出 10 个元素        这是打印出来的秒杀结果

	$redis->close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值