Highlights: This release expands command coverage with new TimeSeries commands and broader TDigest support. It also introduces new commands such as DELEX, DIGEST, and MSETEX, and adds the redis-databases option to enable SELECT support, further improving Redis compatibility.
In addition, this version improves stability and correctness by fixing replication acknowledgment handling and preventing WAL exhaustion caused by slow consumers. Several dependency upgrades were included, notably RocksDB updates up to v10.10.1 and the migration to C++20.
New Features
- feat(ts): add the support of TS.MREVRANGE command by @var-nan in #3245
- feat(ts): add the support of TS.QUERYINDEX command by @lauk20 in #3246
- feat(ts): add the support of TS.ALTER command by @var-nan in #3264
- feat(tdigest): add the support of TDIGEST.RANK command by @donghao526 in #3249
- feat(tdigest): add the support of TDIGEST.REVRANK command by @donghao526 in #3130
- feat(tdigest): add the support of TDIGEST.BYRANK and TDIGEST.BYREVRANK command by @donghao526 in #3296
- feat: add redis-databases option to support SELECT command by @hanxi in #3294
- feat(digest): implement DIGEST command by @chakkk309 in #3320
- feat(delex): implement DELEX command by @Valay17 in #3317
- feat(string): add the support of MSETEX command by @ggyuchive in #3318
- chore(command): add a special category to disable commands by @PragmaTwice in #3251
Bug Fixes
- fix(replication): fix _getack send check by @zhixinwen in #3248
- fix(replication): prevent WAL exhaustion from slow consumers by @ethervoid in #3357
- fix(info): the slave lag in INFO command might be overflowed by @greatsharp in #3271
- fix(command): enhance zdiff parse error case to avoid crash by @ggyuchive in #3316
- fix(command): fix MSETEX key range for command by @ggyuchive in #3336
- fix(stream): add missing return after empty response in XREAD/XREADGROUP OnWrite by @nsweeting in #3337
- fix(string): add empty string value check for INCR to match Redis behavior by @sryanyuan in #3354
- fix(sideloading): avoid the expected data deletion during SST side loading by @ltagliamonte-dd in #3342
- fix(ci): the sonar c/cpp action has been deprecated by @git-hulk in #3280
- fix(ci): use the wrong string in sonar action arguments by @git-hulk in #3284
Performance Improvements
- perf(string): reduce read access in MSETEX by @ggyuchive in #3322
- perf(hash): use MultiGet to reduce RocksDB calls in HMSET by @sryanyuan in #3327
- refactor(tdigest): convert the flags for reverse in TDigest::Rank to a compile-time argument by @donghao526 in #3268
Build & CI
- build: bump C++ standard to 20 by @PragmaTwice in #3300
- build: support to cache archives of fetched dependencies by @PragmaTwice in #3257
- build: introduce subcommand fetch-deps in x.py by @PragmaTwice in #3258
- ci: execute check-and-lint and build jobs in parallel by @PragmaTwice in #3301
- ci: move license check to check-typos by @PragmaTwice in #3302
- ci: re-enable ubuntu 24 build jobs by @PragmaTwice in #3305
- ci: apply maximizing build space step to all linux build jobs by @PragmaTwice in #3292
- ci(riscv): remove toolchain archive and unused packages to save disk space by @PragmaTwice in #3261
- ci: disable rockylinux8 due to no-space-left issue by @PragmaTwice in #3263
- ci: update typos action to version 1.41.0 by @aleksraiden in #3321
- ci: bump typos checker to 1.42.0 by @aleksraiden in #3334
- ci: bump crate-ci/typos action to v1.43.1 by @aleksraiden in #3362
- chore(ci): bump Golang lint to 2.7.0 by @aleksraiden in #3289
- chore(ci): downgrade Alpine to 3.22 to avoid cluster test crash by @aleksraiden in #3330
- chore(deps): bump RocksDB to v10.10.1 by @aleksraiden in #3360
- chore(deps): bump jsoncons to v1.5.0 by @aleksraiden in #3287
- chore(deps): bump zlib-ng to 2.3.2 by @aleksraiden in #3288
- chore(deps): bump spdlog version to v1.17.0 by @aleksraiden in #3325
- chore(deps): use BUILD_TESTING instead of deprecated ZLIB_ENABLE_TESTS by @aleksraiden in #3326
Chores & Maintenance
- chore: fix format issue between different clang-format versions by @PragmaTwice in #3250
- chore: refine .gitignore to remove useless entries by @PragmaTwice in #3256
- chore: update hat-trie to v0.7.1 by @PragmaTwice in #3260
- chore(info): change redis compatibility version to 7.0.0 by @i18nsite in #3286
- chore(parse_util): fix comment typos and clarify base parameter range by @hezhangjian in #3303
- chore(.asf.yaml): add 2.14 into protected branches by @PragmaTwice in #3304
- chore(conf): change the default cache to hyper clock cache by @git-hulk in #3343
- chore(test): update go deps by @aleksraiden in #3323
- chore(tests): replace to slices.Reverse() in go test by @ggyuchive in #3352
New Contributors
- @donghao526 made their first contribution in #3130
- @lauk20 made their first contribution in #3246
- @hanxi made their first contribution in #3294
- @ggyuchive made their first contribution in #3316
- @chakkk309 made their first contribution in #3320
- @Valay17 made their first contribution in #3317
- @nsweeting made their first contribution in #3337
- @ethervoid made their first contribution in #3357
Full Changelog: v2.14.0...v2.15.0