亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis消息隊列實現(xiàn)秒殺教程

 更新時間:2025年04月22日 10:26:43   作者:PengQQ_09  
這篇文章主要介紹了Redis消息隊列實現(xiàn)秒殺教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Redis消息隊列實現(xiàn)秒殺

消息隊列的應(yīng)用場景例如:秒殺、搶單功能。

下面寫個Demo簡單實現(xiàn)一下秒殺,也就是搶購。

首先創(chuàng)建一個lpush.html文件

代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="jquery-3.2.1.min.js" ></script>
        <script>
			function push(uid){
	        	$('#msg'+uid).html('請耐心等待.......');
				$.get('lpush.php',{"uid":uid},function (data){
					if(data == 1 ){
						$('#msg'+uid).html('搶購成功!!');
					}else{
						$('#msg'+uid).html('搶購失敗!!');
					}
				});
			}
        </script>
    </head>
    <body>
        <span id="msg5"></span><br>
        <input type="button" value="搶購5" onclick="push(5)"><br>
        <span id="msg15"></span><br>
        <input type="button" value="搶購15" onclick="push(15)"><br>
        <span id="msg25"></span><br>
        <input type="button" value="搶購25" onclick="push(25)"><br>
        <span id="msg35"></span><br>
        <input type="button" value="搶購35" onclick="push(35)"><br>
        <span id="msg45"></span><br>
        <input type="button" value="搶購45" onclick="push(45)"><br>
        <span id="msg55"></span><br>
        <input type="button" value="搶購55" onclick="push(55)"><br>
    </body>
</html>

在創(chuàng)建一個lpush.php文件用來處理數(shù)據(jù)

這個文件里頭的內(nèi)容呢就是執(zhí)行入隊操作,代碼如下:

<?php
    //實例化redis對象
    $redis = new redis();
    //連接redis,第一個參數(shù)是redis服務(wù)的IP127.0.0.1是自己的,6379是端口號
    $redis->connect('127.0.0.1', 6379);
    //接收ajax傳來的值,請看lpush.html
    $uid = $_GET['uid'];
    //入隊列
    $redis->lpush('tv', $uid);
    //寫一個死循環(huán)用來判斷結(jié)果
    while (true) {
        //守護進程是否將所有訂單處理完畢
        if ($redis->scard('tvuser') == 5) {
            //判斷當(dāng)前用戶是否有對應(yīng)的訂單
            if ($redis->sismember('tvuser' , $uid)) {
                $flag = 1;
            } else {
                $flag = 0;
            }
            //返回給頁面
            echo $flag;
            //滿足條件后停止循環(huán)
            break;
         }
     }
?>

在創(chuàng)建一個守護進程的文件pop.php

這個文件里頭的主要內(nèi)容就是去隊列里頭的值并且返回人數(shù)是否已夠,代碼如下:

<?php
    //實例化redis對象
    $redis = new redis();
    //連接redis,第一個參數(shù)是redis服務(wù)的IP127.0.0.1是自己的,6379是端口號
    $redis->connect('127.0.0.1', 6379);
    //定義一個變量用來存儲循環(huán)次數(shù)
    $num = 0;
    //循環(huán)取值
    while (true) {
        //每隔一秒取一次
        sleep(1);
        //redis取值
        $uid = $redis->rpop('tv');
        //判斷取出來的UID又沒有值
        if ($uid > 0) {
            //有值
            //create order 生成用戶對應(yīng)的訂單
            echo 'order created for user ' . $uid . "\r\n";
            $redis->sadd('tvuser' , $uid); //搶購成功的用戶id
            //如果有值的話num會++
            $num++;
        } else {
            //無值
            //insert log
            echo 'no uid ' . "\r\n";
        }
        //如果num值大于等于5那么循環(huán)終止,循環(huán)次數(shù)是看秒殺多少件商品來變的,這里的話我就定義了5次
        if ($num >= 5) {
            break;
        }
    }
?>

我們在執(zhí)行守護進程之前可以先把redis里的數(shù)據(jù)清空一下,以免擾亂程序執(zhí)行結(jié)果,

命令如下:

效果就是這個樣子的,在秒殺開始之前要先啟動守護進程,

命令效果如下:

然后守護進程啟動之后,前臺就可以來進行秒殺了。

瀏覽器上訪問你的lpush.html,由于我們后臺設(shè)定的商品數(shù)為5,那么只能五個用戶搶購成功,第6個用戶就會提示失敗,如下圖:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Redis 數(shù)據(jù)類型

    詳解Redis 數(shù)據(jù)類型

    這篇文章主要介紹了Redis 數(shù)據(jù)類型的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Redis?ziplist?壓縮列表的源碼解析

    Redis?ziplist?壓縮列表的源碼解析

    ziplist 是一個經(jīng)過特殊編碼的雙向鏈表,旨在提高內(nèi)存效率,它存儲字符串和整數(shù)值,其中整數(shù)被編碼為實際整數(shù)而不是一系列字符,這篇文章主要介紹了Redis?ziplist?壓縮列表的源碼解析,需要的朋友可以參考下
    2022-06-06
  • Redis分布式鎖的幾種實現(xiàn)方法

    Redis分布式鎖的幾種實現(xiàn)方法

    本文主要介紹了Redis分布式鎖的幾種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • redis緩存的簡單操作(get、put)

    redis緩存的簡單操作(get、put)

    這篇文章主要介紹了redis緩存的簡單操作,包括引入jedisjar包、配置redis、RedisDao需要的一些工具等,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Redis瞬時高并發(fā)秒殺方案總結(jié)

    Redis瞬時高并發(fā)秒殺方案總結(jié)

    本文講述了Redis瞬時高并發(fā)秒殺方案總結(jié),具有很好的參考價值,感興趣的小伙伴們可以參考一下,具體如下:
    2018-05-05
  • Redis數(shù)據(jù)庫的數(shù)據(jù)傾斜詳解

    Redis數(shù)據(jù)庫的數(shù)據(jù)傾斜詳解

    Redis,英文全稱是Remote Dictionary Server(遠程字典服務(wù)),是一個開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,需要的朋友可以參考下
    2023-07-07
  • Redis教程(十五):C語言連接操作代碼實例

    Redis教程(十五):C語言連接操作代碼實例

    這篇文章主要介紹了Redis教程(十五):C語言連接操作代碼實例,本篇博客是該系列博客中的最后一篇,在這里將給出基于Redis客戶端組件訪問并操作Redis服務(wù)器的代碼示例,需要的朋友可以參考下
    2015-05-05
  • redis哨兵模式分布式鎖實現(xiàn)與實踐方式(redisson)

    redis哨兵模式分布式鎖實現(xiàn)與實踐方式(redisson)

    這篇文章主要介紹了redis哨兵模式分布式鎖實現(xiàn)與實踐方式(redisson),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 利用Redis實現(xiàn)訂單30分鐘自動取消

    利用Redis實現(xiàn)訂單30分鐘自動取消

    本文主要介紹了利用Redis實現(xiàn)訂單30分鐘自動取消,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Redis教程(六):Sorted-Sets數(shù)據(jù)類型

    Redis教程(六):Sorted-Sets數(shù)據(jù)類型

    這篇文章主要介紹了Redis教程(六):Sorted-Sets數(shù)據(jù)類型,本文講解了Sorted-Sets數(shù)據(jù)類型概述、相關(guān)命令列表、命令使用示例、應(yīng)用范圍等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評論