zoukankan      html  css  js  c++  java
  • 一文带你了解Redis秒杀应用场景

    在大流量程序开发中,必然会遇到高并发的应用的场景。解决方案大致分为两个方向,消息队列、锁

    redis 实现消息队列核心简单版本

    $key = 'quque';
     /**
     * 秒杀商品数量有限,预先存储到消息队列
     */
    public function qnquque() {
     for($i = 1 ; $i<=5 ;$i++) {
         $redis->lpush($key,$i);
        }
     }
    
      /**
     * 这里省略掉业务逻辑处理,默认业务逻辑处理完,出队列
      */
      public function dequque() {
      $redis->rpop($key);
       /**
       *  这里开始商品购买后的业务逻辑处理
       */
      }

    消息队列是防止超买超卖很好的一种解决方案,要实现消息队列的高级功能需要用到专业的消息队列工具例如(rabbitmq).用户Redis 用户redis实现消息队列还是有一些缺点的,可以自行查找文章补充。这边不一一概述。最大问题还是分布式集群的问题。

    Redis 乐观锁实现秒杀功能

    它的优点如下:

    消息队列对内存消耗较大,10000个请求,需要操作10000 出队列。容易造成内存资源瞬间爆棚

    使用乐观锁的逻辑,CPU相对来说消耗较低、内存资源占用少

     $redis = new redis();
        $result = $redis->connect('127.0.0.1', 6379);
        $cachekey = $redis->get("cachekey");
        $number = 100;   //抢购数量
        if($cachekey<$number){
            $redis->watch("cachekey");
            $redis->multi();
    
            //设置延迟,方便测试效果。
            sleep(5);
            //插入抢购数据
            $redis->hSet("cachekeyList","user_id_".mt_rand(1, 9999),time());
            $redis->set("cachekey",$cachekey+1);
            $result = $redis->exec();
            if($result){
                $cachekeyList = $redis->hGetAll("cachekeyList");
                echo "恭喜".$cachekeyList."抢购成功!<br/>";
            }else{
                echo "再接再厉";
                exit;
            }
        }
    

    结尾

    本文并没有从零开始业务分析,都是核心的业务逻辑代码。需要结合实际的业务场景嵌入本文的核心实现逻辑。

    赞赏码

    非学,无以致疑;非问,无以广识

  • 相关阅读:
    mysql 查看表注解
    oracle 相关
    sql version control
    ccna
    msql 清库
    mybatisplus,application.properties 配置数据库密码加密
    驱动开发print无法输出问题
    bochs帮助
    以虚御虚用虚拟机调试vt程式
    ssm整合
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452483.html
Copyright © 2011-2022 走看看