简单的redis使用watch完成秒杀抢购功能
简单的redis使用watch完成秒杀抢购功能
清天君 发表于1年前
简单的redis使用watch完成秒杀抢购功能
  • 发表于 1年前
  • 阅读 200
  • 收藏 3
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 简单的redis使用watch完成秒杀抢购功能

Redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。

代码1:

<?php  
header("content-type:text/html;charset=utf-8");  
$redis = new redis();  
$result = $redis->connect('10.10.10.119', 6379);  
$mywatchkey = $redis->get("mywatchkey");  
$rob_total = 100;   //抢购数量  
if($mywatchkey<$rob_total){  
    $redis->watch("mywatchkey");  
    $redis->multi();  
      
    //设置延迟,方便测试效果。  
    sleep(5);  
    //插入抢购数据  
    $redis->hSet("mywatchlist","user_id_".mt_rand(1, 9999),time());  
    $redis->set("mywatchkey",$mywatchkey+1);  
    $rob_result = $redis->exec();  
    if($rob_result){  
        $mywatchlist = $redis->hGetAll("mywatchlist");  
        echo "抢购成功!<br/>";  
        echo "剩余数量:".($rob_total-$mywatchkey-1)."<br/>";  
        echo "用户列表:<pre>";  
        var_dump($mywatchlist);  exit;  
    }else{  
        echo "手气不好,再抢购!";exit;  
    }  
}  
?>  

代码2:

<?php
$redis = Redis::getClient();
$key = 'miaosha_key';
$key_r = $redis->decr($key); //最关键
if ($key_r < 0) {

	echo json_encode(['code' => 0, 'msg' => '已经被抢光']);
} else {
	//抢到了
	//队列或者直接保存数据库
	echo json_encode(['code' => 1, 'msg' => '抢到了']);
}
标签: redis 秒杀
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 18
码字总数 4729
×
清天君
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: