🚀 Features
- feat: support Redis 8.10 commands
LMOVEM,BLMOVEM,SUNIONCARD,SDIFFCARD,TS.QUERYLABELS,TS.NRANGE,TS.NREVRANGEandTS.READ(#597) - feat(kividb): add the
kividbserver type, matching KiviDB 1.0.4's command surface (#570, #571) - feat(streams):
XADD/XTRIMaccept theKEEPREF/DELREF/ACKEDreference policies (#583)
🐛 Bug Fixes
- fix:
MOVE/SMOVEinvalidateWATCHlike Redis, addSORT_RO, sort unsortedSORTresults in scripts/STORE, and fixZSCANwhile deleting (#595) - fix(bitmap):
BITOPpads shorter operands and treats missing keys as empty (#593) - fix(geo):
*BYMEMBER/FROMMEMBERsearches on a missing member return Redis'/Valkey 9's error instead of crashing (#594) - fix(valkey):
from_urlworks forFakeValkey,FakeStrictValkeyandFakeAsyncValkey(#591) - fix(streams): approximate (
~) trimming drops whole nodes andXADD/XTRIMoptions use Redis' errors (#583) - fix(streams):
XADDnever reuses deleted IDs and rejects invalid IDs like Redis (#583) - fix(streams):
XGROUP SETID/CREATE,entries-readandlagfollow Redis' rules (#583) - fix(streams): consumer-group commands on a missing key return Redis' errors (#584)
- fix(streams):
XRANGE/XREVRANGE/XPENDINGtreat an end ID without sequence as the whole millisecond (#584) - fix(tdigest):
TDIGEST.QUANTILEon a single observation follows Redis 8.10 (#597) - fix(tcp-server):
TcpFakeServeranswers RESP2 clients in RESP2 (#580) - fix(model):
ExpiringMembersSetkeeps the member when clearing its TTL (#578) - fix(async):
FakeAsyncValkeyraisesvalkeyexceptions and async connections reportaddr/laddr/fd(#589) - fix: each connection gets one client ID, and a new one on reconnect (#589)
- fix:
FakeRedis(version=10)no longer shares a server withversion=1(#589)
🧰 Maintenance
- perf: cache glob patterns, skip empty TTL scans, and stop polling in
get_message(timeout=...)(#577) - refactor: layer internals into
fakeredis/_core,fakeredis/_clientsandfakeredis/_socketpackages (#589, #590, #592) - test: run CI against Redis 8.10 and a real KiviDB (#570, #597)
- test: drop stale TODOs and narrow Dragonfly zset test skips (#596)
- test: drop
from __future__ import annotationsfrom test files (#586) - chore: update dependencies and the
setup-uvaction (#587)
New Contributors
- @kratos0718 made their first contribution in #593
Full Changelog: v2.38.0...v2.39.0