Laravel redis秒杀

php写个函数

<?php
 phpinfo();

访问并查看php是否有redis

 

 

 

没有则下载redis==>点我跳转 

     注:下载与php对应的版本号

 

! 解压缩后,将php_redis.dll和php_redis.pdb拷贝至php的ext目录下

4.修改php.ini,(PS:此php.ini文件是在Apache目录)在该文件中加入:

   ; php_redis

   extension=php_igbinary.dll

   extension=php_redis.dll

注意:extension=php_igbinary.dll一定要放在extension=php_redis.dll的前面,否则此扩展不会生效

5.重启Apache后,使用phpinfo查看扩展是否成功安装

 

 

redis秒杀:

 

 

 

 

  方法:一、数据库数据转到redis、秒杀成功后redis数据--,

  方法:二、秒杀成功redis数据++

  1、秒杀前   预热脚本、   问题:1、如何防止服务器宕机? 2、如何防止提前下单?、

            

 

 

 

 

 

 

 

     2、秒杀中  

        3、秒杀后

 

数据迁移redis

 

public function before(){
    $arrs = DB::select("select id,stock from goods");
    $data = json_decode(json_encode($arrs),true);

    $redis=new \ Redis();
    $redis->connect('127.0.0.1',6379);
    $redis->select(2);    // 不写此语句,默认是0号数据库
    // 循环(遍历)所有商品
    foreach ($data as $key => $value) {
        // 给每个商品在redis中创建一个对应的列表,这个列表的键名是 goods+id值
        for($i=1;$i<=$value['stock'];$i++){
            $redis->lpush('goods'.$value['id'],$i);       // 键是 goods1 goods2 goods3等
        }
    }

}

 

 

秒杀页面:

   public function index(){
        $data = DB::select("select * from goods");
        return view("miao.index",['data'=>$data]);
    }

 

时间倒计时:

public function time(){
        $arrs = DB::select("select * from goods");
        $data = json_decode(json_encode($arrs),true);

        // 计算倒计时
        foreach($data as $key=>$value){
            $startTime=time();
            $endTime=$value['endtime'];
            $remainTime=$endTime-$startTime;            // 开始时间和结束时间之间相差的秒数
            $hour=floor($remainTime/3600);        // 1小时是3600秒,所有的秒数除以3600秒,是不就转换成小时了
            $minute=floor(($remainTime-$hour*3600)/60);                // 分钟
            $second=$remainTime-$hour*3600-$minute*60;        //

            $data[$key]['hour']=$hour;
            $data[$key]['minute']=$minute;
            $data[$key]['second']=$second;
        }
        return $data;
    }

 

秒杀后:

 //秒杀后
    public function hou(Request $request){
        $id = $request->get("id");

        $redis=new \Redis();
        $redis->connect('127.0.0.1',6379);
        $redis->select(2);        // 不写此语句,默认是0号数据库

        $key='goods'.$id;        // redis键名

        if($redis->llen($key)>0){
            $redis->lpop($key);        // 从队列中移除一个元素
            return ['code'=>1,'msg'=>'秒杀成功!'];        // 向前台返回数据
        }else{
            return ['code'=>0,'id'=>$id,'msg'=>'秒杀结束!'];
        }

    }

 

 

视图层:

<html>
<head>
    <title></title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
</head>
<body>
@foreach($data as $value)
    <div style='float:left;margin-right:20px;'>
        <p>
            <span id="h{{$value->id}}"></span><span id="m{{$value->id}}"></span><span id="s{{$value->id}}"></span></p>

        <p><img src="{{$value->path}}" width='280' height='200'></p>
        <p>{{$value->name}}</p>
        <p>{{$value->price}}</p>
        <p><input type='button' value='抢购' id="{{$value->id}}"></p>
    </div>
@endforeach
</body>
</html>

<script>
    // 倒计时
    $(document).ready(function(){
        // 计时器
        window.setInterval(function(){
            $.ajax({
                url:'http://w.demo.com/time',
                type:'get',
                dataType:'json',
                success:function(data){
                    for(var i=0;i<data.length;i++){
                        id=data[i]['id'];        // 商品ID
                        $('#h'+id).text(data[i]['hour']);
                        $('#m'+id).text(data[i]['minute']);
                        $('#s'+id).text(data[i]['second']);
                    }
                }
            });
        },1000);        // 每秒(1000毫米)执行一次代码

        // 抢购按钮加单击事件
        $("input[type=button]").click(function(){
            var id=$(this).attr('id');
            $.ajax({
                url:'http://w.demo.com/miao_hou',
                type:'get',
                dataType:'json',
                data:{'id':id},
                success:function(data){
                    if(data['code']==1){
                        alert(data['msg']);
                    }else{
                        alert(data['msg']);
                    }
                }
            });
        });
    });

</script>

 

简单地效果图:

 

posted @ 2020-11-17 15:28  满眼都是她  阅读(341)  评论(0编辑  收藏  举报