Redis的隊列和消息隊列的區別【concept】


Redis 隊列

用redis作為隊列效率高,而且簡單易用

使用場景

  • 用於處理比較耗時的請求,例如批量發送郵件,如果直接在網觸發執行發送,程序會出現耗時

  • 高並發場景,當某個時刻請求瞬間增加時,可以把請求寫入到隊列,后台去處理這些請求

  • 搶購場景,先入先出的模式

Redis 消息隊列

主要應用在網絡中實現異步任務,Reids可以充當消息隊列實現兩種模式:生產者 ->消費者,發布者->訂閱者 第一種方式是一對一,后者是一對多

生產者/消費者模型

生產者模型需要存在生產者和消費者兩方,而在redis中隊列的存儲和獲取可以作為消息隊列被生產者和消費者使用

生產者

redis 在其中做緩存的作用,將任放置到queue隊列里面,其實redis有lpush和rpush,意思是從左邊插入列隊還是右邊插入列隊,這就是生產者部分,將任務插入指定的隊列中。

消費者

簡單的說就是拿出來(BRPOP,RPOP),隊列是按順序取任務的,一般是左邊插入,右邊取出,redis有BRPOP和RPOP,可以設置時間以秒為單位,如果隊列是空的,那么先不返回,
等待一會(設置的時間【BRPOP queue 10】,等待10秒),如果在這期間有新的任務插入,那么就取出任務返回,還是沒有的話,返回空。

  • 訂閱/發布模型

訂閱/發布模型簡單來說是由發布者向訂閱者發送任務,同樣任何訂閱者都可以獲取任務。

發布者使用publish channel task 來發布相關的任務,而訂閱者則是使用subscribe channel,這是一個監聽命令,redis會一直監聽這個channel,如果發布者發布新的任務,
監聽命令會返回任務,直到訂閱者主動退出監聽,但是redis也可以為這個設置超時,保證監聽的有效性,默認如果60秒內沒收到信息就異常退出,當然了這個可以配置。

Redis隊列功能介紹

常用命令:

  • Blpop刪除,並獲得該列表中的第一元素,或阻塞,直到有一個可用

  • Brpop刪除,並獲得該列表中的最后一個元素,或阻塞,直到有一個可用

  • Brpoplpush

  • Lindex獲取一個元素,通過其索引列表

  • Linsert在列表中的另一個元素之前或之后插入一個元素

  • Llen獲得隊列(List)的長度

  • Lpop從隊列的左邊出隊一個元素

  • Lpush從隊列的左邊入隊一個或多個元素

  • Lpushx當隊列存在時,從隊到左邊入隊一個元素

  • Lrange從列表中獲取指定返回的元素

  • Lrem從列表中刪除元素

  • Lset設置隊列里面一個元素的值

  • Ltrim修剪到指定范圍內的清單

  • Rpop從隊列的右邊出隊一個元素

  • Rpoplpush刪除列表中的最后一個元素,將其追加到另一個列表

  • Rpush從隊列的右邊入隊一個元素

  • Rpushx從隊列的右邊入隊一個元素,僅隊列存在時有效

  • Redis支持php、python、c等接口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM