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

redis中隊列消息實現(xiàn)應用解耦的方法

 更新時間:2018年09月13日 16:49:59   作者:macccc  
這篇文章主要給大家介紹了關(guān)于redis中隊列消息實現(xiàn)應用解耦的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

消息隊列的場景

我們都知道,消息是在兩臺計算機之間傳送的數(shù)據(jù)單位,這個“消息”可以非常簡單,例如只包含文本字符串,也可以更復雜,可能包含嵌入對象。而所謂的“消息隊列”是在消息的傳輸過程中保存消息的容器。在web程序中,可能我們需要將用戶的請求數(shù)據(jù)更新或者添加到數(shù)據(jù)庫中,但是在高炳發(fā)的情況下,雖然作為用戶的我們不知道后臺是什么原因,但是依舊會抱怨或者吐槽這個程序反應緩慢,比如在過去的幾年里,你有沒有吐槽過12306搶票很難?反應很慢?有沒有在使用某個程序的時候收到“service is too busy”,而這其實是因為當時的并發(fā)訪問過量,超過了系統(tǒng)的最大負載能力。當然我們可以通過添加服務器集群中服務器的數(shù)量來增加程序的負載能力。

過度耦合的缺點:php應用中,過度的耦合使得系統(tǒng)拓展性變?nèi)?,?lián)動性錯誤。

今天我給大家介紹的是利用redis的隊列消息實現(xiàn)模塊間的解耦。

應用場景:用戶在采購模塊下單買了一批貨物回來,簽收時要在倉庫模塊添加相應的庫存,普通的做法就是在簽收完成的時候通過接口給倉庫模塊推送數(shù)據(jù)執(zhí)行入庫操作。但是這么做如果倉庫模塊發(fā)送錯誤,沒有入庫成功就會導致采購模塊簽收失敗,這就是耦合給系統(tǒng)帶來的缺點。

解決方案:運用php+redis隊列消息的技術(shù),當用戶簽收成功的時候,把數(shù)據(jù)放入隊列中,入列成功采購模塊則返回簽收成功的提示給用戶,后續(xù)的操作都不需要采購模塊操心,然后倉庫系統(tǒng)可以通過redis的訂閱發(fā)布模式來進行監(jiān)聽,當有數(shù)據(jù)入列,則倉庫系統(tǒng)就執(zhí)行入庫邏輯代碼的

運行。

關(guān)鍵點:

1、如果redis服務器掛掉了怎么辦啊?

在采購模塊的簽收邏輯代碼中做判斷,如果入列成功則返回簽收完成,如果入列失敗這運行傳統(tǒng)方法,通過接口入庫的方法。如果redis也掛了,倉庫模塊也掛了怎么辦啊,那你就收拾包袱回家吧。

2、如何實現(xiàn)傳統(tǒng)方式那樣實時入庫啊?

采用redis的訂閱發(fā)布模式就可以解決。訂閱的代碼放在倉庫模塊,發(fā)布的代碼放在采購模塊。

訂閱代碼sub.php

<?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$redis->subscribe(['ruku'], function ($redis, $chan, $msg) {//訂閱入庫頻道   if($msg==2500){   //如果監(jiān)聽到有發(fā)布信息則從隊列中拿取信息進行入庫操作    。。。。。。。  }  
});

發(fā)布代碼pub.php

<?php
$redis = new Redis();
$redis->connect('localhost', 6379);
$order = ['id' => 1, 'name' => '小米6', 'price' => 2499, 'created_at' => '2017-07-14'];$redis->lpush('order',$order);
$redis->publish("ruku", 2500);

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Redis如何存儲對象與集合示例詳解

    Redis如何存儲對象與集合示例詳解

    redis是一個key-value存儲系統(tǒng)。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、 zset(sorted set --有序集合)和hash(哈希類型)本文介紹了關(guān)于Redis是如何存儲對象與集合的相關(guān)資料,需要的朋友可以參考下
    2018-05-05
  • redis啟動,停止,及端口占用處理方法

    redis啟動,停止,及端口占用處理方法

    今天小編就為大家分享一篇redis啟動,停止,及端口占用處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Redis去重的3種不同方法匯總

    Redis去重的3種不同方法匯總

    Redis是完全開源免費的,遵守BSD協(xié)議,是一個高性能的key-value數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于Redis去重的3種不同方法,需要的朋友可以參考下
    2021-11-11
  • Redis使用Lua腳本命令詳解

    Redis使用Lua腳本命令詳解

    這篇文章主要為大家介紹了Redis使用Lua腳本命令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Redis String 類型和 Hash 類型學習筆記與總結(jié)

    Redis String 類型和 Hash 類型學習筆記與總結(jié)

    這篇文章主要介紹了Redis String 類型和 Hash 類型學習筆記與總結(jié),本文分別對String 類型的一些方法和Hash 類型做了詳細介紹,需要的朋友可以參考下
    2015-06-06
  • redis分布式鎖的go-redis實現(xiàn)方法詳解

    redis分布式鎖的go-redis實現(xiàn)方法詳解

    這篇文章主要介紹了redis分布式鎖的go-redis實現(xiàn)方法,本文給大家介紹的非常詳細對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Redis?SCAN命令詳解

    Redis?SCAN命令詳解

    SCAN 命令是一個基于游標的迭代器,每次被調(diào)用之后, 都會向用戶返回一個新的游標, 用戶在下次迭代時需要使用這個新游標作為 SCAN 命令的游標參數(shù), 以此來延續(xù)之前的迭代過程,這篇文章給大家介紹了Redis?SCAN命令的相關(guān)知識,感興趣的朋友一起看看吧
    2022-07-07
  • Redis對象與redisObject超詳細分析源碼層

    Redis對象與redisObject超詳細分析源碼層

    這篇文章主要介紹了Redis對象與redisObject源碼層的分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11
  • Redis在項目中的使用(JedisPool方式)

    Redis在項目中的使用(JedisPool方式)

    項目操作redis是使用的RedisTemplate方式,另外還可以完全使用JedisPool和Jedis來操作redis,本文給大家介紹Redis在項目中的使用,JedisPool方式,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • redis調(diào)用二維碼時的不斷刷新排查分析

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

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

最新評論

那坡县| 龙江县| 育儿| 定南县| 兴国县| 清流县| 松滋市| 太和县| 林口县| 叶城县| 仁寿县| 岳西县| 乌拉特后旗| 金堂县| 邹城市| 丹东市| 萨嘎县| 高唐县| 禄劝| 隆回县| 牙克石市| 历史| 宁阳县| 靖州| 南昌县| 泾阳县| 莱阳市| 千阳县| 石城县| 蓬溪县| 黔东| 焦作市| 宜君县| 怀来县| 平舆县| 镇巴县| 巨鹿县| 高淳县| 宁津县| 广宁县| 贵港市|