问答

我的redis 的 watch 和 get 调换位置为啥会出错呢 ?

作者:admin 2021-05-07 我要评论

$redis = new \redis();$result = $redis-connect('127.0.0.1', 6379);$redis-watch("mywatchkey");$mywatchkey = $redis-get("mywatchkey");$stock_total = 100...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
$redis = new \redis();
$result = $redis->connect('127.0.0.1', 6379);

$redis->watch("mywatchkey");
$mywatchkey = $redis->get("mywatchkey");

$stock_total = 100; //抢购数量
if($mywatchkey < $stock_total) {
    $redis->multi();
    $redis->set("mywatchkey", 1 + $mywatchkey);
    $rob_result = $redis->exec();
    $redis->lPush('user_list', $user_id);
    if ($rob_result) {
        $user_id = 'user_id_' . rand(1, 999999);
      
        
        echo "抢购成功!<br/>";
        echo "剩余数量:".($rob_total-$mywatchkey-1)."<br/>";
        echo "用户列表:<pre>";
        var_dump($mywatchlist);
    } else {
        file_put_contents('./redis_fail_log', "{$user_id}\r\n", FILE_APPEND);
    }
}

我用压力测试, 如果把 $mywatchkey = $redis>get("mywatchkey"); 放到 $redis->watch("mywatchkey"); 之前 , 最后 打印 user_list 的个数就会超出100 ,不知道为啥 。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 我的redis 的 watch 和 get 调换位置为

    我的redis 的 watch 和 get 调换位置为

  • 为啥vue中a标签下载点击一次会加载两次

    为啥vue中a标签下载点击一次会加载两次

  • 前端正则匹配

    前端正则匹配

  • 55寸大触摸屏排版元素尺寸怎么写?

    55寸大触摸屏排版元素尺寸怎么写?

腾讯云代理商
海外云服务器