<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                >[info] Stream Redis Stream 是 Redis 5.0 版本新增加的數據結構。 Redis Stream 主要用于消息隊列(MQ,Message Queue),Redis 本身是有一個 Redis 發布訂閱 (pub/sub) 來實現消息隊列的功能,但它有個缺點就是消息無法持久化,如果出現網絡斷開、Redis 宕機等,消息就會被丟棄。 簡單來說發布訂閱 (pub/sub) 可以分發消息,但無法記錄歷史消息。 而 Redis Stream 提供了消息的持久化和主備復制功能,可以讓任何客戶端訪問任何時刻的數據,并且能記住每一個客戶端的訪問位置,還能保證消息不丟失。 Redis Stream 的結構如下所示,它有一個消息鏈表,將所有加入的消息都串起來,每個消息都有一個唯一的 ID 和對應的內容: ![](https://img.kancloud.cn/a6/a9/a6a93e5913bbcad82e3c3b4ef6044da6_769x514.png) 每個 Stream 都有唯一的名稱,它就是 Redis 的 key,在我們首次使用 xadd 指令追加消息時自動創建。 上圖解析: * **Consumer Group**:消費組,使用 XGROUP CREATE 命令創建,一個消費組有多個消費者(Consumer)。 * **last_delivered_id**:游標,每個消費組會有個游標last_delivered_id,任意一個消費者讀取了消息都會使游標last_delivered_id 往前移動。 * **pending_ids**:消費者(Consumer)的狀態變量,作用是維護消費者的未確認的 id。 pending_ids 記錄了當前已經被客戶端讀取的消息,但是還沒有 ack (Acknowledge character:確認字符)。 ***** ### **消息隊列相關命令:** #### **添加消息到末尾:xadd key id field value [field value ...]** * **key**:隊列名稱,如果不存在就創建 * **ID**:消息 id,我們使用 * 表示由 redis 生成,可以自定義,但是要自己保證遞增性。 * **field value**: 記錄。 ``` # 添加 name age sex 三個參數 xadd stream * name wqs age 24 sex 1 ``` ![](https://img.kancloud.cn/1f/0e/1f0e89a2bd287ecd2619b95833e03700_384x60.png) ***** #### **刪除消息:xdel key ID [ID ...]** * **key**:隊列名稱 * **ID**:消息 ID ``` xdel stream 1630057674409-0 ``` ![](https://img.kancloud.cn/f6/e0/f6e0458288d8fbf211798e9f9251f5e9_314x74.png) ***** #### **對流進行修剪,限制長度:xtrim key maxlen [~] count** 使用 xtrim 對流進行修剪,限制長度, 語法格式:**(未發現任何改變)** * **key**:隊列名稱 * **maxlen**:長度 * **count**:數量 ``` xtrim stream maxlen 2 ``` ![](https://img.kancloud.cn/25/d3/25d3d397220c2e12445e9cd8ef39b63d_299x154.png) ***** #### **消息隊列長度:xlen key** ``` xlen stream ``` ![](https://img.kancloud.cn/e5/72/e572f29c4b5d9ec2b3da23406bb7e5b3_318x252.png) ***** #### **獲取消息列表,會自動過濾已經刪除的消息:range key start end [COUNT count]** * **key**:隊列名 * **start**:開始值,- 表示最小值 * **end**:結束值,+ 表示最大值 * **count**:數量 ``` xrange stream - + # 只獲取1個 xrange stream - + count 1 ``` ![](https://img.kancloud.cn/43/84/4384e5832f3804d7b943c3dc8e8a7ef9_275x188.png) ***** #### **反向獲取消息列表,ID 從大到小:xrevrange key end start [COUNT count]** * **key**:隊列名 * **end**:結束值,+ 表示最大值 * **start**:開始值,- 表示最小值 * **count**:數量 ``` xrevrange stream + - ``` ![](https://img.kancloud.cn/d6/3f/d63f330a20baf26954c81252fd8acd3f_290x183.png) ***** #### **以阻塞或非阻塞方式獲取消息列表:xread [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...]** * **count**:數量 * **milliseconds**:可選,阻塞毫秒數,沒有設置就是非阻塞模式 * **key**:隊列名 * **id**:消息 ID
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看