This is the second Milestone of Redis 8.8 in Redis Open Source.
Milestones are non-feature-complete pre-releases. Pre-releases are not suitable for production use.
Headlines:
Redis 8.8 introduces new features and performance improvements.
8.8-M02 is available as a Docker image and can be downloaded from Docker Hub. Additional distributions will be introduced in upcoming pre-releases.
Operating systems we test Redis 8.8 on
- Ubuntu 22.04 (Jammy Jellyfish), 24.04 (Noble Numbat), 26.04 (Resolute Raccoon)
- Rocky Linux 8.10, 9.7, 10.1
- AlmaLinux 8.10, 9.7, 10.1
- Debian 12.13 (Bookworm), Debian 13.4 (Trixie)
- Alpine 3.23
- macOS 14.8.4 (Sonoma), 15.7.4 (Sequoia), 26.3 (Tahoe) - for both Intel and ARM
New Features (compared to 8.6)
- #14826, #14905 GCRA (generic cell rate algorithm) rate limiter (based on the redis-cell module by @brandur - thank you!)
- #14797
XNACK: a new streams command that allows consumers to explicitly release pending messages - RedisJSON/RedisJSON#1509
JSON.SET: newFPHAargument to specify the FP type for FP homogeneous arrays (MOD-13577) - #14892
ZUNION,ZINTER,ZUNIONSTORE,ZINTERSTORE: newCOUNTaggregator - RedisTimeSeries/RedisTimeSeries#1916
TS.RANGE,TS.REVRANGE,TS.MRANGE,TS.MREVRANGE: multiple aggregators in a single command (MOD-9162)
Bug fixes (compared to 8.6.2)
- #15037
XINFO STREAM: wrong value in the per-slot memory tracking - #12000 Incorrect shrinking of querybuf when client is reading a big argv
- #15021
HEXPIRE: overflow on fields count - #14963
XREADGROUP: consumer replication inconsistency - #15011 Double-free in rdbLoadObject
- #14667, #14886 Potential TCP stalls/deadlocks
- #14942 Fix
COMMAND GETKEYS for PFMERGEwith no source keys - #14888 Hardens safety check in
lpSafeToAdd - #14748 Ensure sensitive user data is not exposed in logs when
hide_user_data_from_logis enabled - #14877
INFO KEYSIZESandINFO ALLOCSIZESfixes - #14878 listpack memory leak in zipmap-to-hash conversion on error path
- #14955 Streams: IDMP-related bug
- #14974, #14932, #14866 Memory leaks
- #14790 Missing initialization
- #14789 DB hash tables not expanding during RDB load on standalone-mode
- #14785 Add
HOTKEYS HELPsubcommand (Each command having subcommands needs aHELPsubcommand) - #14784
RESTOREandSET:expiredkeyscounter updates incorrectly on keys with past expiration time - #14779 Accurate memory accounting for RedisModuleDict (instead of estimation)
- #14774 Missing cleanup code in
getKeysFreeResult()on cross-slot error path - #14771 Potential unsigned integer underflow in
used_memory_dataset calculation - #14780 Fixed name of
HOTKEYSresults fieldsampled-command-selected-slots-ustosampled-commands-selected-slots-us - #14756
HOTKEYSdoes not track each command in aMULTI/EXECblock - #14749 Fixed
HOTKEYS GETRESP3 reply fixed to map instead of flat array - RedisJSON/RedisJSON#1520 Numeric operations on homogeneous arrays: promote to next type if results overflow (MOD-14427)
- RedisJSON/RedisJSON#1519
JSON.NUMINCRBY,JSON.NUMMULTBYdon’t error on numeric overflow (MOD-14191) - RedisJSON/RedisJSON#1487 Depth limit (128) was not fully enforced (MOD-4107)
- RedisTimeSeries/RedisTimeSeries#1910
TS.INCRBY,TS.DECRBYcreate key before validating args (MOD-8167) - RedisTimeSeries/RedisTimeSeries#1908 Potential crash on
TS.RANGEwith aggregation andEMPTY - RedisTimeSeries/RedisTimeSeries#1896 Potential memory leak (MOD-13438)
- RedisTimeSeries/RedisTimeSeries#1913 ACL rules are not fully enforced for multi-key commands on a cluster setup (MOD-14124)
Performance and resource utilization improvements (compared to 8.6.2)
- #15003 Reduce overhead in command propagation
- #14979 Dismiss dict bucket arrays in fork child to reduce CoW
- #14661 Replace fast_float C++ library with pure C implementation
- #14928 Disable memory tracking in child processes
- #14885 Optimize rax (radix tree) insert and lookup for sequential key patterns
- #14335 Handle primary/replica clients in I/O threads
- #14754 Optimize prefetching commands
- #14770 Optimize
BITOPoperations with AVX512 - #14862 Streams: Filter expired IDMP entries during RDB save and load
- #14750
SFLUSHcan now flush slots partially - #14887
SFLUSHskips slot trimming when the requested slot ranges exactly match the node’s local slot coverage - #14851 Skip RDB checksum computation/validation during diskless full synchronization to reduce CPU overhead
- #14783 Pause dict auto-resize during multi-field deletion
- RedisTimeSeries/RedisTimeSeries#1884
TS.RANGE,TS.REVRANGE,TS.MRANGE,TS.MREVRANGE: improve performance on a cluster setup (RED-184104) - RedisTimeSeries/RedisTimeSeries#1866 Register to
type_changedKSN instead ofset(MOD-12919)
Modules API
- #14445 Allow modules to associate metadata with keys
RedisModule_CreateKeyMetaClass- define a new key-metadata classRedisModule_ReleaseKeyMetaClass- release a key-metadata classRedisModule_SetModuleMetadata- attach or update metadata to a keyRedisModule_GetKeyMeta- get key metadata
Metrics
- #14896
INFO STATS- global stats for slowlog metrics:slowlog_commands_count- commands written to slowlogslowlog_commands_time_ms_sum- sum of execution times of commands from the slowlogslowlog_commands_time_ms_max- maximum execution time of a command from the slowlog
- #14896
INFO COMMANDSTATS- per-command stats for slowlog metrics:slowlog_count- number of times the command was written in the slowlogslowlog_time_ms_sum- sum of execution time of the command (only from the slowlog)slowlog_time_ms_max- maximum execution time of the command (only from the slowlog)
- #14841
INFO STATS(global, all clients aggregated):total_client_processing_events: attempts to process client input buffers; does not guarantee any command was actually parsedeventloop_cycles_with_clients_processing: event loop cycles where client input buffers were processedcommands_per_parse_batch_sum: cumulative number of commands parsed across all parsing batches for all clientscommands_per_parse_batch_cnt: number of parsing batches across all clients. A batch is counted each time at least one command is parsed from a client's query buffercommands_per_parse_batch_avg: average commands parsed per batch (sum/cnt). Approximates pipelining depth
- #14841
CLIENT INFOandCLIENT LIST(per-client):read-events: number of read events for this clientparse-batch-cmd-sum: cumulative number of commands parsed across all parsing batches for this clientparse-batch-cnt: total number of parsing batches for this client. Divideparse-batch-cmd-sumby this value to get the client’s average commands per batch
CLI tools
Fetched May 1, 2026
