php之redis秒杀(自己捣鼓的一套代码)

生产者

实际上秒杀是有活动时间限制,需要把活动时间、活动状态、数量、产品ID等信息整合到redis中,根据前端过来的产品ID直接获取对应产品信息

// 模拟用户id
$userid = rand(1000, 99999);

// 秒杀最大数量
$max = 100;

// 限购
if ($redis->hExists('hash_miaosha_11011', $userid)) {
    echo '每人限购一件';exit;
}

// 秒杀完了
if ($redis->hLen('hash_miaosha_11011') >= $max || ) {
    echo '秒杀结束了';exit;
}

// 抢购队列
$redis->lPush('miaosha_11011', $userid);

// 已参与队列,已参与的人不能重复参与
$redis->hSet('hash_miaosha_11011', $userid, $userid);

echo '抢到了!';exit;

消费者

在确认秒杀或者活动结束后,消费完所有队列,需要把使用了的redis队列、哈希、产品信息进行移除(后台定时器去检测活动信息,在完全结束后,从redis中移除所有信息)

// 模拟消费队列
while ($userid = $redis->rPop('miaosha_11011')) {

    // 已成功购买的不能重复购买,对可能出现的漏网之鱼二次过滤
    if ($redis->hExists('hash_success_miaosha_11011', $userid)) {
        break;
    }

    // do something...
    // 订单入库

    // 购买成功队列
    $redis->hSet('hash_success_miaosha_11011', $userid, 0);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值