本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

自訂Stream宏節點大小

更新時間:2024-10-24 19:48

您可以通過stream-node-max-bytes參數修改Stream中每個宏節點(Macro Node)能夠佔用的最大記憶體,或者通過stream-node-max-entries參數指定每個宏節點中可儲存條目的最大數量。

前提條件

  • 執行個體的引擎版本為相容Redis 5.0或以上。

  • 執行個體的架構為標準版。

Redis Streams與宏節點

Stream是Redis 5.0版本新增的資料類型。Redis Streams是一些由基數樹(Radix Tree)串連在一起的節點經過delta壓縮後構成的,這些節點與Stream中的訊息條目(Stream Entry)並非一一對應,而是每個節點中都儲存著若干Stream條目,因此這些節點也被稱為宏節點或大節點。這樣的資料結構為訪問隨機元素、訪問指定範圍內的多個元素、實現定長Stream等操作提供了高效的支援,同時具有極高的記憶體利用率。

宏節點中可儲存的Stream條目數可通過stream-node-max-entries自訂,而單個宏節點佔用的記憶體大小則可通過stream-node-max-bytes來限制。

  • stream-node-max-entries:預設值為100,即每個宏節點儲存100個Stream條目。取值範圍:0~999,999,999,999,999。0表示無限制。當一個宏節點中儲存的Stream條目數達到上限時,新添加的條目將儲存到新的宏節點中。

  • stream-node-max-bytes:單位為Byte,預設值為4096,即每個宏節點佔用的記憶體容量上限為4096 Bytes。取值範圍:0~999,999,999,999,999。0表示無限制。

典型應用情境

使用stream-node-max-entries可以調整定長訊息隊列的隊列長度誤差值。

在不需要將訊息永久儲存的應用中,您可以在使用XADD命令添加Stream資料時藉助MAXLEN選項限定每個Stream中訊息數量的上限,例如:

XADD cappedstream MAXLEN 5000 * field value5001 // 在cappedstream的field1中添加一個新的值value5001,隊列長度為5000

當Stream中的訊息數量達到上限,每添加一條新的訊息就會同時刪除最早的訊息。這樣無論添加了多少條訊息,最大隊列長度始終保持不變,失效訊息不會繼續佔用記憶體空間。

說明

在宏節點中刪除訊息實際上是將訊息標記為已刪除,並不會馬上釋放其佔用的記憶體空間。當一個宏節點中的所有訊息都被標記為已刪除時,Redis才會刪除整個節點並釋放記憶體。

但是,如果想要精確控制這個上限值,例如讓隊列中只儲存5000條訊息,1條都不能多,代價會很大:為了儘可能地提高記憶體利用率,Stream資料其實是由基數樹中的多個宏節點群組成的,每次刪除1條訊息都需要檢索相應的宏節點,找到目標訊息,將其標記為已刪除。在高吞吐的Redis服務中,訊息的更新頻率可能非常高,頻繁進行這樣的操作將大大提高效能壓力。因此,推薦的做法是使用波浪線(~)限定隊列的大致長度,例如:

XADD cappedstream MAXLEN ~ 5000 * field value1 // 在cappedstream的field1中添加一個新的值value5001,隊列長度約為5000

這樣一來,隊列的實際長度將是一個大於等於指定值的近似值。在上面的範例程式碼中,實際隊列長度可能是5000、5050或者5060等,超出5000的誤差值與Stream中包含了多少個宏節點以及每個宏節點中儲存的訊息數有關。Redis根據每個宏節點中儲存的最大條目數,即stream-node-max-entries參數的值,自動計算得出這個近似值。此時,當Redis Stream中的訊息數量超過這個近似值,Redis將刪除儲存了最早添加的訊息的宏節點來完成隊列長度的剪下,而不需要進行訊息層級的刪除操作。

也就是說,stream-node-max-entries參數的值決定了定長訊息隊列長度的誤差值。如果希望誤差值較小,可以適當地將參數值變小。

操作步驟

  1. 訪問執行個體列表,在上方選擇地區,然後單擊目標執行個體ID。

  2. 在左側導覽列中,單擊參數設定

  3. 在參數列表中,單擊stream-node-max-bytes右側操作列的修改

  4. 在彈出的對話方塊中完成以下步驟。

    1. 修改stream-node-max-bytes的值。

    2. 單擊確定

相關API

API介面

說明

API介面

說明

DescribeParameters

查詢執行個體的配置參數和運行參數。

ModifyInstanceConfig

修改執行個體的參數配置。

  • 本頁導讀 (1, M)
  • 前提條件
  • Redis Streams與宏節點
  • 典型應用情境
  • 操作步驟
  • 相關API
文檔反饋