Redis 8.8.0
Redis 8.8.0 has been released — bringing a brand-new native array data structure, a built-in rate limiting command, and several quality-of-life enhancements for stream consumers. Here's the full breakdown.
Overview
Redis 8.8, released on May 25, 2026, is a feature release that introduces several long-requested capabilities without compromising the simplicity that made Redis famous. The headline addition is the new native array data structure — a first-class collection type that sits alongside strings, hashes, lists, sets, and sorted sets.
This release also closes a significant gap in stream processing with the XNACK command, adds a purpose-built rate limiter called INCREX, and delivers hash field-level notifications alongside several security fixes.
The Redis team has published this release as open source under the Redis License. The 8.8 branch is available immediately from the download page and package managers.
Array Data Structure
Redis 8.8 introduces a native array type that stores ordered collections of elements with O(1) index access. Unlike lists, which are optimised for push/pop at both ends, the array type supports efficient random access, slicing, and in-place updates at any index.
Key commands include ARR.INSERT, ARR.GET, ARR.SET, ARR.LEN, ARR.RANGE, and ARR.DEL. The implementation uses a B-tree-like internal layout that keeps memory fragmentation low even for large arrays.
This fills a gap for applications that previously had to serialize arrays into JSON strings or Lua tables, offering native performance and atomicity.
INCREX — Built-in Rate Limiter
INCREX (INCR with EXpiry) is a new command that combines increment and TTL semantics into a single atomic operation. It acts as a window counter rate limiter: it increments a key by a given amount and sets an expiry only on the first increment, avoiding the race conditions that plagued Lua-scripted rate limiters.
Usage: INCREX resource:user:123 60 1000 — this attempts to add 60 tokens to the counter for user 123 within a 1000-second window. If the limit is exceeded, the command returns the current count and the caller can decide how to throttle.
This eliminates the need for custom Lua scripts for one of the most common Redis patterns, reducing complexity and improving throughput.
XNACK — Explicit Stream NACK
Stream consumers can now explicitly release pending messages back to the group's pending entries list (PEL) without acknowledging them. The XNACK command marks one or more messages as "not acknowledged," making them immediately available for re-delivery to other consumers in the group.
This is critical for implementing dead-letter queues, poison-message handling, and custom retry logic without resorting to workarounds like XCLAIM with bogus consumers.
Syntax: XNACK mystream mygroup SILENT|FAIL|FATAL IDS 3 1700000000000-0 1700000000001-0 1700000000002-0
Additional Features
- Hash field-level notifications: Keyspace notifications can now be filtered to specific hash fields, cutting down on noise for applications that monitor large hashes.
- Sorted set COUNT aggregator: A new aggregation mode for sorted set range queries that returns element counts instead of the elements themselves.
- JSON.SET with FPHA: The JSON module now supports fast-path hash array (FPHA) serialisation for improved throughput on small JSON documents.
- VSIM with EPSILON: The Vector Similarity command now accepts an EPSILON argument to specify maximum distance thresholds.
Security Fixes
This release addresses several security vulnerabilities, including CVE-2026-23631 (remote code execution) and a potential use-after-free issue (CVE-2026-23479) in the pub/sub and Lua defrag subsystems. Users running earlier versions are strongly encouraged to upgrade.
Redis 8.8.0 is available now. See the full release notes on GitHub and the official Redis documentation for migration guidance.