专栏首页码农编程进阶笔记一文带你了解Redis秒杀应用场景

一文带你了解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;
        }
    }

结尾

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

本文分享自微信公众号 - 码农编程进阶笔记(lxw1844912514),作者:竹子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis使用场景一(活动秒杀)

    redis的互斥锁可以解决这个问题,redis的setnx命令在指定的 key 不存在时,为 key 设置指定的值。当存在时,则无法插入值

    憨批程序员
  • 一文带你了解Serverless架构及应用场景

    通过本文你可以了解到:第一,Serverless架构介绍;第二,对云函数产品介绍;第三,Serverless使用场景。

    coder_koala
  • 《吊打面试官》系列-秒杀系统设计

    Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。

    敖丙
  • 再问秒杀,用这篇去“怼”面试官,就够了!

    很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,...

    程序猿石头
  • PHP备战面试知识参考(备忘)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/...

    泥豆芽儿 MT
  • 敖丙带你设计【秒杀系统】

    我之前写过一个秒杀系统的文章不过有些许瑕疵,所以我准备在之前的基础上进行二次创作,不过让我决心二创秒杀系统的原因是我最近面试了很多读者,动不动就是秒杀系统把我整...

    敖丙
  • 实战 Spring Cloud 微服务架构下的“秒杀”(含代码)

    来源:github.com/coderliguoqing/distributed-seckill/

    用户1516716
  • 【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

    作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了...

    冰河
  • 大型网站千万级大数据高并发-破解法

    究竟什么样的系统算是高并发系统?今天,我们就一起解密高并发业务场景下典型的秒杀系统的架构,结合高并发专题下的其他文章,学以致用。关于爬虫和大数据技术,下一篇继续...

    孔雀
  • 基于spring boot高性能高并发秒杀系统方案及优化 第一部分

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    营琪
  • 《吊打面试官》系列-秒杀系统设计

    首先设计一个系统之前,我们需要先确认我们的业务场景是怎么样子的,我就带着大家一起假设一个场景好吧。

    乔戈里
  • SpringBoot开发案例从0到1构建分布式秒杀系统

    最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路。俗话说,脱离案例讲架构都是耍流氓,最终使用Spri...

    小柒2012
  • SpringBoot开发案例从0到1构建分布式秒杀系统

    小柒2012
  • SpringBoot开发案例从0到1构建分布式秒杀系统

    最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路。俗话说,脱离案例讲架构都是耍流氓,最终使用Spri...

    小柒2012
  • 带你彻底搞懂 Redis 16 大应用场景

    例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。

    民工哥
  • 面试官:了解秒杀?简单分析下高并发场景下秒杀系统的设计思路

    秒杀系统之所以难做,是因为在极短的时间内涌入大量的请求,来同时访问有限的服务资源,从而造成系统负载压力大,甚至导致系统服务瘫痪以及宕机的可能。本文会介绍秒杀系统...

    用户5546570
  • 基于spring boot高性能高并发秒杀系统方案及优化

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    营琪
  • 你知道如何实现分布式锁吗?这边看:分布式锁服务插件——mykit-lock开源啦!

    开源地址:https://github.com/sunshinelyz/mykit-lock

    冰河
  • 掌握分布式场景下的秒杀架构与秒杀实践

    出处:https://my.oschina.net/u/1170843/blog/2878515

    搜云库技术团队

扫码关注云+社区

领取腾讯云代金券