資料與儲存 2026 年 6 月 4 日

2026-06-04 — Redis 8.8:Array 型別、INCREX 限速器、XNACK Stream

primary=https://redis.io/blog/announcing-redis-8-8/ primary=https://redis.io/blog/diving-deep-into-rediss-new-array-data-type/ primary=https://redis.io/blog/redis-88-performance-improvements-faster-mget-mset-streams-and-more/

Redis 8.8 發布:Array 新資料型別、INCREX 原生限速器、Stream XNACK 指令

Redis 官方部落格 · 2026-06-02

Redis 於 2026 年 6 月 2 日發布 Redis 8.8,帶來七項新特性。最重要的三項分別是:新的 Array 資料型別(以索引為單位的通用集合)、INCREX 指令(原生固定窗口限速器)、以及 XNACK 指令(Stream 消費者的顯式 NACK 語意)。效能層面,MGET pipeline 在 I/O-threads 模式下提升 68%,XREADGROUP 提升 83%。

Array:新的通用索引集合

Array 是 Redis 8.8 引入的第一個全新資料型別(自 Sorted Sets 以來),特點是以 64-bit 整數索引 進行 O(1) 隨機存取,動態擴縮且支援稀疏儲存(間隔不浪費記憶體)。相較於 List(順序存取佳、隨機存取差),Array 的使用場景是「需要快速按位置讀寫的滑動視窗、環形緩衝、或向量化數值聚合」。

核心指令:

  • ARSET key index value / ARGET key index:O(1) 寫入與讀取
  • ARRING key count value:環形緩衝寫入(bounded rolling buffer),吞吐量是 RPUSH + LTRIM 組合的 2 倍
  • ARAGG key SUM|MIN|MAX|AND|OR|XOR from to:伺服器端聚合,避免將大量資料拉到客戶端
  • ARSEARCH key pattern:支援精確比對、glob 模式、正規表達式的元素搜尋

效能基準(100K 元素、1KB 值):隨機讀寫比 List 快 5–8 倍;比 Hash 快 8–15%,但 Hash 在欄位名稱存取上仍有優勢。

INCREX:原生限速計數器

在 Redis 8.8 之前,固定窗口限速的標準做法是用 Lua 腳本包裝 INCR + EXPIREINCREX 將這個模式原子化為單一指令:

INCREX key BYINT 1 EX 60 UBOUND 100 SATURATE

參數語意:

  • EX / PX:key 的到期時間(只在 ENX 旗標下僅首次設定,避免每次請求都重置過期)
  • UBOUND:上限,超過則拒絕並回傳當前值
  • SATURATE:允許部分接受(計數器截止到上限,回傳實際接受的增量)

回傳值為 [新計數值, 實際遞增量],呼叫端可從實際增量判斷是否被限流。

XNACK:Stream 消費者的顯式拒絕

Redis Stream 的 PEL(Pending Entry List)原本沒有語意化的拒絕機制;消費者若無法處理某條訊息,只能等超時後由 XAUTOCLAIM 重新分配。XNACK 加入三種拒絕模式:

  • SILENT:無告警拒絕(服務重啟、暫時性錯誤),遞減送達計數,訊息排回 PEL 頭部等待重試
  • FAIL:此消費者無資源處理,計數不變,優先分配給其他消費者
  • FATAL:毒訊息(malformed payload),送達計數設為 LLONG_MAX,等待人工介入

效能摘要

操作改善幅度
MGET(I/O-threads 管線)+68%
XREADGROUP COUNT 100+83%
ZADD/ZINCRBY/ZRANGEBYSCORE+74%
SCAN/HSCAN/SSCAN/ZSCAN+40%
全量同步(Persistence & Replication)+60%

原始來源:Redis 8.8 Release AnnouncementArray Data Type Deep DiveRedis 8.8 Performance Improvements


End of article
0
Would love your thoughts, please comment.x
()
x