2014-11-02 11 views
5

Làm cách nào để nhận được hầu hết các phần tử có trọng số từ một tập hợp được sắp xếp, nhưng loại trừ các phần tử được tìm thấy trong tập hợp khác (hoặc danh sách hoặc băm).Cách nhận DIFF trên bộ đã sắp xếp

>zadd all 1 one 
>zadd all 2 two 
>zadd all 3 three 
>sadd disabled 2 
>sdiff all disabled 

(error) WRONGTYPE Operation against a key holding the wrong kind of value 

là lựa chọn duy nhất của tôi là để có được các yếu tố từ được sắp xếp thiết lập một-by-one và so sánh với danh sách các mục "khuyết tật"? Nó sẽ không phải là rất chậm vì rất nhiều giao dịch với một máy chủ?

Cách tiếp cận ở đây là gì?

Trả lời

17

Lưu ý: Tôi giả sử bạn đã có nghĩa là sadd disabled two

Như bạn đã phát hiện ra, SDIFF không hoạt động trên bộ được sắp xếp - đó là bởi vì việc xác định sự khác biệt giữa các bộ được sắp xếp là không nhỏ.

gì bạn có thể làm là lần đầu tiên tạo ra một bộ tạm thời với ZUNIONSTORE và thiết lập điểm của giao nhau để 0. Sau đó làm một loạt trừ 0, ví dụ .:

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" 
+1

mát lừa, Itamar! – djanowski

+0

@djanowski cảm ơn :) hy vọng sẽ gặp lại tại #RedisConf 2016! –

Các vấn đề liên quan