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 + EXPIRE。INCREX 將這個模式原子化為單一指令:
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 Announcement、Array Data Type Deep Dive、Redis 8.8 Performance Improvements