前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文带你了解Redis秒杀应用场景

一文带你了解Redis秒杀应用场景

作者头像
码农编程进阶笔记
发布2021-09-09 16:24:18
3630
发布2021-09-09 16:24:18
举报

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

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

代码语言:javascript
复制
$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相对来说消耗较低、内存资源占用少

代码语言:javascript
复制
 $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;
        }
    }

结尾

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农编程进阶笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis 实现消息队列核心简单版本
  • 结尾
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档