Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment obtenir DIFF sur un ensemble trié

Remarque :Je suppose que vous vouliez dire sadd disabled two

Comme vous l'avez découvert, SDIFF ne fonctionne pas sur les ensembles triés - c'est parce que définir la différence entre les ensembles triés n'est pas trivial.

Ce que vous pouvez faire, c'est d'abord créer un ensemble temporaire avec ZUNIONSTORE et définir les scores de l'intersection sur 0. Ensuite, faites une plage excluant le 0, par exemple :

127.0.0.1:6379> ZADD all 1 one 2 two 3 three
(integer) 3
127.0.0.1:6379> SADD disabled two
(integer) 1
127.0.0.1:6379> ZUNIONSTORE tmp 2 all disabled WEIGHTS 1 0 AGGREGATE MIN
(integer) 3
127.0.0.1:6379> ZREVRANGEBYSCORE tmp +inf 1 WITHSCORES
1) "three"
2) "3"
3) "one"
4) "1"