redis实现秒杀思路

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qiang1370373713/article/details/76283377


1.创建数据库

CREATE TABLE `redis_queue` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `uid` int(11) NOT NULL DEFAULT '0',
  `time_stamp` varchar(24) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8;
2.存入redis

<?php 
    $redis = new \Redis();
    $redis->connect('127.0.0.1',6379);
    $redis_name = "miaosha";
    //最好压测工具
    for ($i=0;$i<100;$i++){
        $uid = rand(100000, 999999);
    
        //$uid = $_GET['uid'];//接收用户ID
    
        $num = 10;
        
        if($redis->lLen($redis_name)<10){
            $redis->rPush($redis_name,$uid.'%'.microtime());
            echo $uid."秒杀成功";
        }else{
            echo "秒杀结束";
        }
    }
   $redis->close();
?>
3.获取redis存入数据库记录

<?php 
    include 'class/db.php';
    
    $redis = new \Redis();
    $redis->connect('127.0.0.1',6379);
    $redis_name = "miaosha";
    
    $db = DB::getIntance();
    
    //死循环
    while(true){
        $user = $redis->lPop($redis_name);
        
        //判断值是否存在
        if(!$user || $user == 'nil'){
            sleep(2);
            continue;
        }
        
        $user_arr = explode('%',$user);
        
        $insert_data = array(
            'uid'=>$user_arr[0],
            'time_stamp'=>$user_arr[1],
        );
        $res = $db->insert('redis_queue',$insert_data);
        if(!$res){
           $redis->rPush($redis_name,$user); 
        }
        sleep(2);
    }
    $redis->close();
?>

4.服务器执行 php  xxxx.php入库程序,死循环去查询redis数据


猜你喜欢

转载自blog.csdn.net/Qiang1370373713/article/details/76283377