2015-02-23 73 views
2

我在redis上有多個包含用戶ID和分數的有序集。有什麼方法可以過濾並獲取出現在多個集合上的用戶ID嗎?例如,如果列表看起來像這樣獲取出現在多個redis排序集上的所有密鑰

List A - u1, u2, u3, u4, u5 
List B - u3, u4, u5 
List C - u4, u2, u3 
List D - u4, u1, u2 
  1. 如果我在列表中的進料,B,C,d然後應出現的唯一用戶ID是U4

  2. 如果我飼料中列表A,B,C然後返回的用戶ID是u4,u3。

我可以成像通過加載每個列表和過濾掉每個列表,直到我留下我想要的ID在PHP這樣做,但有什麼辦法,我可以開展Redis的這個操作?

我也開放了將這種結構存儲在redis中的新方法。

回答

3

在集合論中,它被稱爲交集。 Redis有一個ZINTERSTORE命令,它與多個有序集合的鍵相交併將它們存儲到一個新的鍵中。

ZINTERSTORE LIST-Z 4 A B C D 
ZRANGE LIST-Z 0 -1 WITHSCORES 

這從相交鍵A,B,C和d的用戶,並存儲在路口密鑰列表-Z

+0

感謝這個,我認爲這是一段路要走。一直在玩這個,我得到了我期望的結果。 – JohnP 2015-02-23 12:36:38