What's Changed
🐛 Bug Fixes
- fix: honor the
FILTER-EF(max filtering effort) option inVSIM— the value was previously parsed but ignored, so a
lowFILTER-EFcould return filter matches that real Redis skips - fix:
ZPOPMIN/ZPOPMAXin RESP3 now return a flat[member, score]pair when no count is given (an array of pairs is
only returned when an explicit count is passed), matching real Redis - fix:
ZPOPMIN/ZPOPMAXnow reject a negative count withvalue is out of range, must be positive - fix:
ZPOPMIN/ZPOPMAX/BZPOPMIN/BZPOPMAX/ZMPOP/BZMPOPnow delete the sorted set key once its last member is
popped - fix:
LTRIMnow signals the key as modified even when the trim is a no-op, so aWATCHon that key correctly aborts
the following transaction, matching real Redis - fix: align stream group errors with Redis —
XPENDINGon a missing key or unknown group now raisesNOGROUPinstead
of returning0/an empty array, and neitherXPENDINGnorXINFO GROUPScreates the key as a side effect (#532)
🧰 Maintenance
- perf:
VADD/VSIMkeep a row-oriented matrix of the vector set resident and reuse it, instead of restacking every
stored vector on each call; re-adding an existing member now replaces its row rather than leaving a stale one - perf: cache compiled
JSONPathobjects in the JSON stack mixin (#538) - build: drop Python 3.9, target Python 3.10+ (#534)
- Update to redis-py 8.1
- refactor: modernize typing for Ruff 0.16 defaults (#533)
- test: refactor hypothesis tests
New Contributors
Full Changelog: v2.37.0...v2.37.1