You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Moon ships the core zset command set but is missing the non-STORE aggregation variants and several Redis 6.2 / 7.0 additions. Most application code has workarounds via ZINTERSTORE/ZUNIONSTORE + temp keys, but modern clients (redis-py, ioredis, go-redis) call the inline versions directly.
Missing commands
ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT o c]
ZINTER/ZUNION/ZDIFF are *STORE logic minus the final write — refactor existing storage handlers to return a Vec<(Bytes, f64)> that either gets written or serialized to the response.
ZRANDMEMBER with count ≥ 0: unique sampling (Fisher-Yates over skiplist). Count < 0: with replacement. Match Redis distribution exactly (consistency tests will catch drift).
Summary
Moon ships the core zset command set but is missing the non-STORE aggregation variants and several Redis 6.2 / 7.0 additions. Most application code has workarounds via
ZINTERSTORE/ZUNIONSTORE+ temp keys, but modern clients (redis-py, ioredis, go-redis) call the inline versions directly.Missing commands
ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT o c]ZDIFF numkeys key [key ...] [WITHSCORES]ZDIFFSTORE dst numkeys key [key ...]ZUNION numkeys key [key ...] [WEIGHTS ...] [AGGREGATE ...] [WITHSCORES]ZINTER numkeys key [key ...] [WEIGHTS ...] [AGGREGATE ...] [WITHSCORES]ZINTERCARD numkeys key [key ...] [LIMIT limit]ZMSCORE key member [member ...]ZRANDMEMBER key [count [WITHSCORES]]ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]Design notes
ZINTER/ZUNION/ZDIFFare*STORElogic minus the final write — refactor existing storage handlers to return aVec<(Bytes, f64)>that either gets written or serialized to the response.ZRANDMEMBERwith count ≥ 0: unique sampling (Fisher-Yates over skiplist). Count < 0: with replacement. Match Redis distribution exactly (consistency tests will catch drift).ZMPOPshares plumbing withLMPOP(feat(commands): list/hash/set convenience variants (LPUSHX/RPUSHX/LMPOP/HRANDFIELD/SMOVE/SINTERCARD) #60).AGGREGATE MIN/MAX/SUM— easy to get wrong for weighted cases.Acceptance criteria
WITHSCORES,WEIGHTSwhere applicable.ZINTERSTORE/ZUNIONSTOREpaths.References
src/t_zset.c