最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

Redis消息隊(duì)列實(shí)現(xiàn)秒殺

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

下面寫(xiě)個(gè)Demo簡(jiǎn)單實(shí)現(xiàn)一下秒殺,也就是搶購(gòu)。

首先創(chuàng)建一個(gè)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('請(qǐng)耐心等待.......');
				$.get('lpush.php',{"uid":uid},function (data){
					if(data == 1 ){
						$('#msg'+uid).html('搶購(gòu)成功!!');
					}else{
						$('#msg'+uid).html('搶購(gòu)失敗!!');
					}
				});
			}
        </script>
    </head>
    <body>
        <span id="msg5"></span><br>
        <input type="button" value="搶購(gòu)5" onclick="push(5)"><br>
        <span id="msg15"></span><br>
        <input type="button" value="搶購(gòu)15" onclick="push(15)"><br>
        <span id="msg25"></span><br>
        <input type="button" value="搶購(gòu)25" onclick="push(25)"><br>
        <span id="msg35"></span><br>
        <input type="button" value="搶購(gòu)35" onclick="push(35)"><br>
        <span id="msg45"></span><br>
        <input type="button" value="搶購(gòu)45" onclick="push(45)"><br>
        <span id="msg55"></span><br>
        <input type="button" value="搶購(gòu)55" onclick="push(55)"><br>
    </body>
</html>

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

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

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

在創(chuàng)建一個(gè)守護(hù)進(jìn)程的文件pop.php

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

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

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

命令如下:

效果就是這個(gè)樣子的,在秒殺開(kāi)始之前要先啟動(dòng)守護(hù)進(jìn)程,

命令效果如下:

然后守護(hù)進(jìn)程啟動(dòng)之后,前臺(tái)就可以來(lái)進(jìn)行秒殺了。

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

總結(jié)

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

相關(guān)文章

  • Redis實(shí)現(xiàn)Session持久化的示例代碼

    Redis實(shí)現(xiàn)Session持久化的示例代碼

    Redis是內(nèi)存數(shù)據(jù)庫(kù),數(shù)據(jù)都是存儲(chǔ)在內(nèi)存中,為了避免服務(wù)器斷電等原因?qū)е翿edis進(jìn)程異常退出后數(shù)據(jù)的永久丟失,本文主要介紹了Redis實(shí)現(xiàn)Session持久化的示例代碼,感興趣的可以了解一下
    2023-09-09
  • redis中的數(shù)據(jù)結(jié)構(gòu)和編碼詳解

    redis中的數(shù)據(jù)結(jié)構(gòu)和編碼詳解

    本文主要和大家分享幾種Redis數(shù)據(jù)結(jié)構(gòu)詳解,希望文中的案例和代碼,能幫助到大家。
    2020-03-03
  • Redis?key-value亂碼的解決

    Redis?key-value亂碼的解決

    本文主要介紹了Redis?key-value亂碼的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 深度剖析Redis字符串操作指南從入門(mén)到實(shí)戰(zhàn)應(yīng)用

    深度剖析Redis字符串操作指南從入門(mén)到實(shí)戰(zhàn)應(yīng)用

    Redis字符串類(lèi)型二進(jìn)制安全,支持文本、數(shù)字、二進(jìn)制等數(shù)據(jù),涵蓋基礎(chǔ)操作、數(shù)字計(jì)算、過(guò)期管理及分布式鎖等應(yīng)用,結(jié)合優(yōu)化策略提升系統(tǒng)性能,本文給大家介紹Redis字符串操作指南,感興趣的朋友一起看看吧
    2025-07-07
  • 基于Redis+Lua腳本的分布式全局令牌桶限流方案

    基于Redis+Lua腳本的分布式全局令牌桶限流方案

    這篇文章主要介紹了如何采用Redis和Lua腳本實(shí)現(xiàn)分布式全局令牌桶限流,解決多實(shí)例部署、并發(fā)超賣(mài)及限流一致性問(wèn)題,保障高并發(fā)場(chǎng)景下流量控制與系統(tǒng)穩(wěn)定性,需要的朋友可以參考下
    2026-05-05
  • Redis服務(wù)端主動(dòng)回收配置的使用小結(jié)

    Redis服務(wù)端主動(dòng)回收配置的使用小結(jié)

    本文主要介紹了Redis服務(wù)端主動(dòng)回收配置的使用小結(jié),包括客戶端主動(dòng)回收、連接池配置、連接泄漏檢測(cè)及服務(wù)端策略設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Redisson 主從一致性問(wèn)題詳解

    Redisson 主從一致性問(wèn)題詳解

    這篇文章主要為大家介紹了Redisson 主從一致性問(wèn)題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 淺析Redis中紅鎖RedLock的實(shí)現(xiàn)原理

    淺析Redis中紅鎖RedLock的實(shí)現(xiàn)原理

    RedLock?是一種分布式鎖的實(shí)現(xiàn)算法,由?Redis?的作者?Salvatore?Sanfilippo(也稱(chēng)為?Antirez)提出,本文主要為大家詳細(xì)介紹了紅鎖RedLock的實(shí)現(xiàn)原理,感興趣的可以了解下
    2024-02-02
  • redis調(diào)用二維碼時(shí)的不斷刷新排查分析

    redis調(diào)用二維碼時(shí)的不斷刷新排查分析

    這篇文章主要為大家介紹了redis調(diào)用二維碼時(shí)不斷刷新排查分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 詳解Redis Stream做消息隊(duì)列

    詳解Redis Stream做消息隊(duì)列

    這篇文章主要介紹了詳解Redis Stream做消息隊(duì)列,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09

最新評(píng)論

文安县| 隆尧县| 中方县| 梁河县| 双江| 南靖县| 景宁| 大连市| 安多县| 洪泽县| 临沭县| 海口市| 镇雄县| 灵石县| 鸡西市| 美姑县| 隆安县| 赤峰市| 方正县| 榕江县| 万源市| 淳化县| 湘潭县| 克山县| 佛冈县| 莱西市| 乳源| 北辰区| 综艺| 高尔夫| 电白县| 黄浦区| 正宁县| 慈利县| 怀安县| 新乡县| 宁波市| 蛟河市| 上犹县| 长阳| 集贤县|