商品id:10001要实现抢购,数量是一件
//把商品id当做唯一key
$goods_id = 10001;
//当前用户id
$user_id = 8;
//将当前用户的id用rpush存入list中
Redis::rpush($goods_id , $user_id);
/*
* 多人并发同时抢购时
* redis中key为10001的list数据为
* 8,9,10,11,12
*/
//用lindex在key为10001中从左边拿第一个数
$firstUserId = Redis::lIndex($goods_id , 0);
//如果当前用户的id不等于从key为10001的list中拿的第一个值,则表示没抢到抛出去
if ($user_id != $firstUserId ) {
throw new CodeMessageException('已抢完');
}
//生成订单。。。。
本人试了这种确实能实现抢购不溢出 有更好发方式,也可以交流下,还有个问题,就是同一个用户去重问题 比如现在需求是能够抢购五件,每个人只能是一件,当list中存在多个重复同样的值时候怎么解决 。。。