乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      異步消息隊列l(wèi)ist

       行者花雕 2020-01-15

      Redis的list也可以作為異步消息隊列來使用,當然,你可以用來處理非重要數(shù)據(jù),如果是重要數(shù)據(jù)的話,建議還是使用專業(yè)的MQ消息隊列。

      list使用rpush/lpush入隊列、lpop和rpop出隊列。

      說白了,就是建立一個循環(huán)來不停的通過lpop、rpop來獲取消息,如果list長度為0,那么就sleep 1秒后再繼續(xù)循環(huán)獲取消息。但是,這種編寫代碼方式有個問題,就是假如有N個消費者,那么每個消費者sleep 1秒的話,那這可是一個很長的時間呢,這會導致list面對大量rpush/lpush時,會快速增長。

      這里用blpop、brpop來取代lpop、rpop命令,因為b是blocking縮寫即阻塞讀,當隊列沒有數(shù)據(jù)的時候,隊列進入休眠狀態(tài),當數(shù)據(jù)到來后則立即處理,且消息的延遲幾乎為零,這樣就可以完美解決sleep 1秒的問題以及N個消費者sleep 1秒所引發(fā)的后果。

      這里注意個問題,如果線程一直阻塞,說明客戶端一直沒有發(fā)送消息,那么服務器可能會主動斷開連接,這個時候blpop/brpop會拋出異常,因此編寫客戶端消費者時注意捕獲異常,還要重試。

      擴展

      Redis2.8之后,通過set擴展參數(shù)來實現(xiàn)獲取鎖、釋放鎖的操作,當獲取鎖失敗之后,通常有3個方式來處理:

      直接拋出異常讓用戶自己決定下一步操作

      sleep一段時間再去重試

      把獲取鎖的請求放到延時隊列中,過段時間再去嘗試

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多