日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis队列和阻塞队列

發布時間:2024/3/24 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis队列和阻塞队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis 隊列的優點是輕量級,業務足夠簡單時不需要使用rabbitMq這樣專業的消息中間件;缺點是彈出隊列中的元素時,即使該消息處理失敗也無法再次進行消費

Redis隊列 List

簡單演示如下

普通的redis隊列,為了實現業務,通常會使用while進行循環,這樣的話沒有消息時依舊會頻繁的執行循環,造成cpu的空轉,所以一般會在代碼中增加sleep來解決該問題,但因此又會造成消息延遲問題。

阻塞隊列可以很好的解決這些問題。

Redis阻塞隊列

redis隊列提供了 “阻塞式” 拉取消息的命令:BRPOP / BLPOP,這里的 B 指的是阻塞(Block)。
如果隊列為空,消費者在拉取消息時就「阻塞等待」,一旦有新消息過來,就通知消費者立即處理新消息。

阻塞隊列實現:

使用 BRPOP 這種阻塞式方式拉取消息時,還支持傳入一個「超時時間」,如果設置為 0,則表示不設置超時,直到有新消息才返回,否則會在指定的超時時間后返回 NULL

下面是某業務完整的消費者代碼

注意:

  • 阻塞時間結束后代碼會繼續向下執行
  • 如果設置的超時時間太長,這個連接太久沒有活躍過,可能會被 Redis Server 判定為無效連接,之后 Redis Server 會強制把這個客戶端踢下線。所以,客戶端要有處理機制。
    實際項目中redis連接超時時間遠大于20s,因此正常情況不會出現redis超時問題。以防萬一增加redis異常捕獲,出現異常時殺掉當前進程,同時supervisord會自動重新拉起該進程
  • 總結

    以上是生活随笔為你收集整理的Redis队列和阻塞队列的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。