php redis实现一个简单的电商秒杀效果代码

代码语言:phpcli

所属分类:其他

代码描述:php redis实现一个简单的电商秒杀效果代码,function miaosha表示模拟一个秒杀场景,插入队列,如果超过商品数量,就会显示秒杀结束

代码标签: 一个 简单 电商 秒杀 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<?php
//设置redis数据库连接及键名
$redis = new Redis();
$redis->connect('127.0.0.1');
$key = 'product1'; //redis数据库key [注:默认redis数据库选择第0号数据库]


//死循环
//从队列最前头取出一个值,判断这个值是否存在,取出时间和uid,保存到数据库
//数据库插入失败时,要有回滚机制
//注: rpush 和lpop是一对

while (1) {
    //从队列最前头取出一个值
    $uid = $redis->lPop($key);
    //判断值是否存在
    if (!$uid || $uid == 'nil') {
        sleep(2);
        echo "没有消息\n";
        continue;
    }
    echo $uid."插入订单\n";
    //生成订单号
    $orderNum = build_order_no($uid);
    //生成订单时间
    $timeStamp = time();
    //构造插入数组
    $user_data = array('uid' => $uid, 'time_stamp' => $timeStamp, 'order_num' => $orderNum);
    $res = addorder($uid, $orderNum, 1, 1);
    //如果插入失败,就要回滚,插入到队列中
    if (!$res) {
        $redis->rPush($key, $uid);
    }
}
//数据库中插入订单
function addorder($uid, $orderNum, $productid, $amount) {
    // 此处是插入数据库订单表的代码,自己写吧
    return true;
}

//生成唯一订单号
function build_order_no($uid) {
    return  substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8).$uid;
}
//模拟秒杀商品数据
function m.........完整代码请登录后点击上方下载按钮下载查看

网友评论0