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

结尾

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111457.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mac 激活码GoLand 2021.2.3 破解(JetBrains全家桶)

    (mac 激活码GoLand 2021.2.3 破解)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsa…

    2022年3月27日
    1.2K
  • nginx配置https转发

    nginx配置https转发

    2021年5月14日
    213
  • IDEA 安装 Lombok 插件

    IDEA 安装 Lombok 插件

    2021年7月11日
    123
  • mit6.824 lab4_mit6.830

    mit6.824 lab4_mit6.830一、 BETAISAA:0、1、2、3、0xcB:0x2000、0xEDEDEDED、0xFEDEDEDE、0x2004、11000000000111110010000000000000(0xc01f2000)C:0x87654321、1、0x87654320、0x14、01110111111000010000000000000010(0x77e10002)D:17、0、32、noinstructionsneedtobechangedE:4、110000000

    2022年9月30日
    3
  • OpenProcessToken令牌函数用法「建议收藏」

    OpenProcessToken令牌函数用法「建议收藏」>GetCurrentProcessID得到当前进程的IDOpenProcessToken得到进程的令牌句柄LookupPrivilegeValue查询进程的权限AdjustTokenPrivileges调整令牌权限要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Admin

    2022年6月25日
    25
  • 兄弟1218无线打印服务器错误,兄弟无线打印机无法打印怎么办?「建议收藏」

    兄弟1218无线打印服务器错误,兄弟无线打印机无法打印怎么办?「建议收藏」在使用打印机的过程中,打印失败是很常见的。互联网上有很多解决方案,但由于产品型号不同,解决方案并不通用,可能并不适合每台机器。今天,一秀。com的边肖将与你分享我哥哥的无线打印机无法打印的解决方案。别错过了!如果打印机无法打印,请首先确保打印机电器的电源线插入墙壁插座,并按下位于打印机顶部的“开/关”键。如果打印机有电源,请判断打印机是否在线。单击桌面上的开始按钮,然后选择打印机和传真。右键单击打…

    2022年5月30日
    137

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号