php秒杀防重复中奖_php redis实现高并发电商秒杀抢购功能

高并发产生的问题:

1、超卖:比如A商品库存是10个,在同一时间有100个用户去抢购这个商品,这个时候去判断库存是否充足,答案肯定是充足的。造成的问题就是会多卖了90个。

2、超抢:一般秒杀是一个用户只能抢一次。如果某平台没有对用户唯一性做限制,就是说在不同的设备上都可以登录这个平台,然后同时去抢这个商品,就会造成这个商品被同一个用户抢了多次。

redis优势:

1、redis队列方法:因为redis队列可以实现及时多个用户同时去请求,也会按顺序排列起来。是一种单线程模式。

2、redis哈希方法:hash可以根据用户id存储用户信息,并且每个用户id只存储一次。用来实现超抢问题。

解决方法:

1、提前将抢购商品存到redis队列中。

$redis = new Redis();

$redis->connect('127.0.0.1', 6379);//商品A总库存量

A商品id:$goods_id;

库存:$num = 10;

for($i=0;$i<10;$i++){

$redis->rpush('goods_store:'.$goods_id,1);

}

这个步骤可以放到秒杀开始前,比如写个定时去执行这个脚本,将所有秒杀商品库存都放到redis队列中

2、秒杀活动开始,用户开始抢购商品

$goods_id;//商品id

$user_id;//当前抢购用户id

$wait_key

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值