Topics
Affected surfaces
Summary
AI summaryBroad release touches Bug Fixes, Build & CI, New Features, and Security & Hardening.
Full changelog
Highlights: This release continues to improve Redis compatibility and operational visibility. New command coverage includes CLIENT PAUSE/CLIENT UNPAUSE, CLIENT SETINFO, LATENCY, TDIGEST.TRIMMED_MEAN, BITPOS BYTE/BIT range units, conditional SET options (IFEQ, IFNE, IFDEQ, IFDNE), DUMP support for the SortedInt type, and CLUSTERX FLUSHSLOTS for clearing slot ranges in cluster mode.
This version also strengthens cluster and observability workflows by propagating slave failure state in CLUSTER NODES, exposing worker thread CPU time, adding more KMETADATA output, and introducing dictionary compression settings.
Stability and security were improved with Lua and LuaJIT hardening, safer replication/fullsync handling, stricter command permissions, RDB malformed intset validation, data race fixes, and multiple correctness fixes across Streams, Geo, TDigest, Set, ZSet, HyperLogLog, and scripting. Dependencies were also refreshed, including RocksDB v11.1.1, jsoncons v1.7.0, jemalloc v5.3.1, oneTBB v2023.0.0, zlib v2.3.3, and fast_float v8.2.7.
This release contains internal groundwork for Hash Field Expiration, but the HFE user-facing feature was disabled for the 2.16.0 release and should not be treated as available functionality in this version.
New Features
- feat(rdb): add DUMP support for SortedInt type by @Zakir032002 in https://github.com/apache/kvrocks/pull/3366
- feat(command): add FLUSHSLOTS command to clear keys in specified slot ranges in cluster mode by @sryanyuan in https://github.com/apache/kvrocks/pull/3375
- feat(info): add thread CPU time measurement for worker thread monitoring by @sryanyuan in https://github.com/apache/kvrocks/pull/3379
- feat(client): Add support for the CLIENT PAUSE/UNPAUSE commands to provide a temporary solution for failover by @Paragrf in https://github.com/apache/kvrocks/pull/3378
- feat(cluster): propagate slave failure state via CLUSTER NODES fail flag by @Paragrf in https://github.com/apache/kvrocks/pull/3386
- feat(tdigest): implement TDIGEST.TRIMMED_MEAN command by @chakkk309 in https://github.com/apache/kvrocks/pull/3312
- feat: Add support for dictionary compression settings by @nagisa-kunhah in https://github.com/apache/kvrocks/pull/3425
- feat(commands): expose hash, list and json metadata in kmetadata by @PragmaTwice in https://github.com/apache/kvrocks/pull/3454
- feat(string): add digest length validation for DelEX IFDEQ/IFDNE by @kirito632 in https://github.com/apache/kvrocks/pull/3453
- feat(server): implement LATENCY command set (Redis 7.0+ compatibility) by @gongna-au in https://github.com/apache/kvrocks/pull/3461
- feat(commands): implement CLIENT SETINFO subcommand by @gongna-au in https://github.com/apache/kvrocks/pull/3465
- feat(bit): add BYTE/BIT option support for BITPOS command by @gongna-au in https://github.com/apache/kvrocks/pull/3460
- feat(string): support IFEQ/IFNE/IFDEQ/IFDNE in SET command by @kirito632 in https://github.com/apache/kvrocks/pull/3475
Bug Fixes
- fix(stream): accept
~modifier in XADD and XTRIM by @XYenon in https://github.com/apache/kvrocks/pull/3403 - fix(server): data race when accessing the db scan infos in GetLatestKeyNumStats by @songqing in https://github.com/apache/kvrocks/pull/3414
- fix(conf): cap proto-max-bulk-len to 4 GiB instead of UINT64_MAX by @songqing in https://github.com/apache/kvrocks/pull/3419
- fix(stream): correct subkey prefix encoding in DestroyGroup by @songqing in https://github.com/apache/kvrocks/pull/3420
- fix(zset): initialize *inter_cnt before early return in InterCard by @songqing in https://github.com/apache/kvrocks/pull/3421
- fix(string,hash): use compact float format in IncrByFloat to match Redis by @songqing in https://github.com/apache/kvrocks/pull/3427
- fix(set): propagate storage errors in Set instead of treating as NotFound by @songqing in https://github.com/apache/kvrocks/pull/3428
- fix(command): fix static initialization crash on Kunpeng/Kylin platform by @sryanyuan in https://github.com/apache/kvrocks/pull/3416
- fix(stream): correct XREVRANGE minimum argument count from 2 to 4 by @songqing in https://github.com/apache/kvrocks/pull/3438
- fix(geo): use strict weak ordering in sortGeoPointDESC comparator by @songqing in https://github.com/apache/kvrocks/pull/3439
- fix(tdigest): merge into existing dest without OVERRIDE by @Tangruilin in https://github.com/apache/kvrocks/pull/3412
- fix(tdigest): correct TDIGEST.MERGE parser for COMPRESSION parameter by @Tangruilin in https://github.com/apache/kvrocks/pull/3449
- fix(hyperloglog): use namespace-prefixed key in PFMERGE GetMetadata by @songqing in https://github.com/apache/kvrocks/pull/3441
- fix(stream): allow group and consumer names starting with digits by @songqing in https://github.com/apache/kvrocks/pull/3442
- fix(geo): delete store_key instead of user_key in SearchStore by @songqing in https://github.com/apache/kvrocks/pull/3456
- fix(geo): make geo store commands return the resulting set size with COUNT by @jihuayu in https://github.com/apache/kvrocks/pull/3457
- fix(tdigest): fix incorrect min/max default initialization by @Tangruilin in https://github.com/apache/kvrocks/pull/3463
- fix(stream): align XPENDING ID parsing and PEL range with XRANGE (incomplete IDs, exclusive bounds) by @songqing in https://github.com/apache/kvrocks/pull/3437
- fix(scripting): reject negative FCALL key count by @songqing in https://github.com/apache/kvrocks/pull/3466
- fix(bitfield): support Redis positional '#N' offset syntax by @nkroker in https://github.com/apache/kvrocks/pull/3470
- fix(zset): register zdiffstore as write command by @jihuayu in https://github.com/apache/kvrocks/pull/3486
Security & Hardening
- fix(script): upgrade Lua version to fix CVE-2024-31449 and CVE-2025-49844 by @jihuayu in https://github.com/apache/kvrocks/pull/3435
- fix(command): APPLYBATCH should use the admin permission by @git-hulk in https://github.com/apache/kvrocks/pull/3458
- fix(replication): require admin for transfer commands by @git-hulk in https://github.com/apache/kvrocks/pull/3484
- fix(replication): reject unsafe fullsync file names by @git-hulk in https://github.com/apache/kvrocks/pull/3483
- fix(scripting): bump LuaJIT to reject bytecode loading by @git-hulk in https://github.com/apache/kvrocks/pull/3492
- fix(scripting): sanitize lua error replies by @jihuayu in https://github.com/apache/kvrocks/pull/3494
- fix(rdb): reject malformed intset lengths by @git-hulk in https://github.com/apache/kvrocks/pull/3519
- chore(security): add draft threat model and SECURITY.md for security-model discoverability by @potiuk in https://github.com/apache/kvrocks/pull/3509
Improvements
- refactor: use stderr for CLI error output by @sanjana2505006 in https://github.com/apache/kvrocks/pull/3372
- chore(util): replace strtof/strtod with fast-float by @PragmaTwice in https://github.com/apache/kvrocks/pull/3394
- chore(config): remove the deprecated configuration
rocksdb.max_background_{compactions,flushes}and set default to -1 by @yatriks in https://github.com/apache/kvrocks/pull/3398 - chore(scan): remove additional abstraction for subkey scanning by @PragmaTwice in https://github.com/apache/kvrocks/pull/3490
Hash Field Expiration Groundwork (Disabled in 2.16.0)
- feat(hash): initialize field expiration metadata and subkey en/decoding by @PragmaTwice in https://github.com/apache/kvrocks/pull/3444
- feat(hash): track persistent hash fields & support hash field expiration commands by @PragmaTwice in https://github.com/apache/kvrocks/pull/3472
- feat(hash): restrict condition for hash encoding mode by @PragmaTwice in https://github.com/apache/kvrocks/pull/3488
- feat(hash): implement hlen scan repair by @PragmaTwice in https://github.com/apache/kvrocks/pull/3501
- feat(hash): support HFE compaction filter by @PragmaTwice in https://github.com/apache/kvrocks/pull/3503
- feat(hash): add HFE expire and TTL commands by @PragmaTwice in https://github.com/apache/kvrocks/pull/3506
- release: disable HFE feature for 2.16 release by @PragmaTwice in https://github.com/apache/kvrocks/commit/ec870bc86628deaa6948d1f9bec335591cb4f429
Build & CI
- chore(ci): bump golang lint to v2.9.0 by @aleksraiden in https://github.com/apache/kvrocks/pull/3370
- chore(ci): bump all used actions to latest by @aleksraiden in https://github.com/apache/kvrocks/pull/3383
- chore(ci): bump docker/build-push-action to v7 by @aleksraiden in https://github.com/apache/kvrocks/pull/3384
- chore(ci): Use the lastest version of clang-format-18 & clang-tidy-18 by @jihuayu in https://github.com/apache/kvrocks/pull/3389
- chore(ci): fix sonarcloud security hotspots by @jihuayu in https://github.com/apache/kvrocks/pull/3392
- chore(ci): use git-hash in actions for ASF actions approval list by @LindaSummer in https://github.com/apache/kvrocks/pull/3400
- fix(ci): failure in macOS due to the unavailable cmake version by @git-hulk in https://github.com/apache/kvrocks/pull/3415
- chore(ci): bump typos action to version 1.45.0 by @aleksraiden in https://github.com/apache/kvrocks/pull/3422
- fix(ci): add check-and-lint success as a merge condition by @jihuayu in https://github.com/apache/kvrocks/pull/3423
- chore(ci): Update paths-filter and header action versions by @jihuayu in https://github.com/apache/kvrocks/pull/3426
- fix(ci): modify Redis build cache keys by @jihuayu in https://github.com/apache/kvrocks/pull/3430
- build: disable LTO by default by @PragmaTwice in https://github.com/apache/kvrocks/pull/3440
- feat(ci): add caching for CMake FetchContent in CI workflow by @jihuayu in https://github.com/apache/kvrocks/pull/3448
- chore(build): Move environment variables from RUN to dedicated ENV instruction by @aleksraiden in https://github.com/apache/kvrocks/pull/3477
- chore(build): jemalloc disable flag for ArchLinux build by @aleksraiden in https://github.com/apache/kvrocks/pull/3480
- chore(build): change base docker image to debian:trixie-slim by @aleksraiden in https://github.com/apache/kvrocks/pull/3478
- chore(build): bump golangci-lint to 2.12.1 by @aleksraiden in https://github.com/apache/kvrocks/pull/3476
- chore(test): bump Go-version to 1.25 for tests by @aleksraiden in https://github.com/apache/kvrocks/pull/3485
- ci: exclude kvrocks2redis from sonar coverage by @jihuayu in https://github.com/apache/kvrocks/pull/3512
- release: fix version of docker/login-action by @PragmaTwice in https://github.com/apache/kvrocks/commit/f9b0d59e0bda64d483ba171a435fc84a19e197ca
Dependency Updates
- chore(deps): Bump zlib version to v2.3.3 by @aleksraiden in https://github.com/apache/kvrocks/pull/3361
- chore(deps): bump jsoncons version to v1.6.0 by @aleksraiden in https://github.com/apache/kvrocks/pull/3401
- chore(deps): bump jemalloc to 5.3.1 by @aleksraiden in https://github.com/apache/kvrocks/pull/3451
- chore(deps): bump jsoncons to v1.7.0 by @aleksraiden in https://github.com/apache/kvrocks/pull/3464
- chore(ci): bump crate-ci/typos to v1.46.0 by @aleksraiden in https://github.com/apache/kvrocks/pull/3474
- chore(deps): bump oneTBB to v2023.0.0 by @aleksraiden in https://github.com/apache/kvrocks/pull/3473
- chore(deps): bump rocksdb to v11.1.1 by @aleksraiden in https://github.com/apache/kvrocks/pull/3468
- chore(deps): bump fast_float to 8.2.5 by @aleksraiden in https://github.com/apache/kvrocks/pull/3479
- chore(deps): bump fast_float to v8.2.7 by @aleksraiden in https://github.com/apache/kvrocks/pull/3513
Chores & Maintenance
- chore(docs): add AGENTS.md for AI coding agent guidance by @git-hulk in https://github.com/apache/kvrocks/pull/3369
- chore: update copyright year in NOTICE by @caicancai in https://github.com/apache/kvrocks/pull/3374
- chore(.asf.yaml): add 2.15 into protected branches by @git-hulk in https://github.com/apache/kvrocks/pull/3376
- chore: fix typos in README and redis_bitmap.cc by @sanjana2505006 in https://github.com/apache/kvrocks/pull/3390
- docs(agents): clarify agent workflow guidance by @PragmaTwice in https://github.com/apache/kvrocks/pull/3455
- release: prepare source release apache-kvrocks-2.16.0 by @PragmaTwice in https://github.com/apache/kvrocks/commit/28440b5cba12a791b058713cbbae4ef86fbf37a2
New Contributors
- @Zakir032002 made their first contribution in https://github.com/apache/kvrocks/pull/3366
- @Paragrf made their first contribution in https://github.com/apache/kvrocks/pull/3378
- @sanjana2505006 made their first contribution in https://github.com/apache/kvrocks/pull/3372
- @yatriks made their first contribution in https://github.com/apache/kvrocks/pull/3398
- @XYenon made their first contribution in https://github.com/apache/kvrocks/pull/3403
- @songqing made their first contribution in https://github.com/apache/kvrocks/pull/3414
- @nagisa-kunhah made their first contribution in https://github.com/apache/kvrocks/pull/3425
- @kirito632 made their first contribution in https://github.com/apache/kvrocks/pull/3453
- @gongna-au made their first contribution in https://github.com/apache/kvrocks/pull/3461
- @nkroker made their first contribution in https://github.com/apache/kvrocks/pull/3470
- @potiuk made their first contribution in https://github.com/apache/kvrocks/pull/3509
Full Changelog: https://github.com/apache/kvrocks/compare/v2.15.0...v2.16.0
Breaking Changes
- Removed deprecated configuration `rocksdb.max_background_{compactions,flushes}` (set default to -1).
Security Fixes
- CVE-2024-31449 – Lua vulnerability fixed by upgrading Lua version.
- CVE-2025-49844 – LuaJIT vulnerability mitigated by bumping LuaJIT to reject unsafe bytecode loading.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About kvrocks
Apache Kvrocks is a distributed key value NoSQL database that uses RocksDB as storage engine and is compatible with Redis protocol.
Related context
Related tools
Beta — feedback welcome: [email protected]