zoukankan      html  css  js  c++  java
  • php使用redis watch秒杀抢购

     redis的watch multi exec 方法实现秒杀抢购。优点:使用了乐观锁没有锁的等待,比队列方式减少了大量的内存消耗。
     watch 监视一个或多个key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断.
    $redis = new redis();
    $result = $redis->connect('127.0.0.1',6379);
    $getnum = $redis->get('getnum');//已抢数量
    $num = 100;//抢购总数量
    if($getnum < $num){
        $redis->watch('getnum');//监听key
        $redis->multi();//开启事务
        //插入抢购数据
        $redis->hSet("userList",'user_id_'.mt_rand(1,999),time());
        $redis->set("getnum",$getnum+1);//抢购到+1
        $robResult = $redis->exec();//执行事务
            if ($robResult) {
            echo "抢购成功!<br/>";
            echo "剩余数量:" . ($num - ($redis->get("getnum"))) . "<br/>";
            echo "用户列表:<pre>";
            var_dump($redis->hGetAll("userList"));
        } else {
            echo "手气不好,再抢购!";
            exit;
        }
    
    }else{
         echo "已售罄";
         exit;
    }
    世界上最美的风景,是自己努力的模样
  • 相关阅读:
    php修改数据
    php显示表中数据及删除数据
    php登录注册页面
    Php数据访问
    php基础测试整理
    php抽象类与接口的实际作用
    正则表达式
    mini-spinner格式化
    miniui动态设置下拉框的值
    js金额千分位保留3位小数,不足补0
  • 原文地址:https://www.cnblogs.com/xiong-hua/p/14107293.html
Copyright © 2011-2022 走看看