2012-03-28 67 views
6

我想知道是否有人可以提供一些關於如何使有序集生成更有效的建議?Redis:從基於散列字段值的排序集中排除值

我正在研究一個項目,按小時計算排名數據並存儲在數據庫中。數據可以按成員性別,國家等進行過濾。大約需要處理2百萬行,需要很長時間。

我們希望轉移到更實時的方法,即在Redis中存儲/排序/過濾數據,並進行每日清理重建。

在我的原型中,我爲每個可能的過濾器組合創建了一個排序集,例如:leaderboard.au.male,leaderboard.au.female等。我已經爲此過程編寫了腳本,但是一旦處理完每一個案例,有118個已創建的有序集。

理想情況下,我希望爲包含他們的姓名,性別和國家的每個成員提供單個排序排序集和散列集。然後使用Redis僅基於用戶定義的過濾器返回排序的設置值。 (例如只獲得澳大利亞男性的排名)。

這是否可以在Redis中進行本地化?

回答

4

我建議你保持一組與排名所有成員:

leaderboard = { id1: score1, id2: score2, ... } 

併爲每種類型(性別,國別等)一套:

members.male = { id1, id2, ... } 
members.au = { id2, id3, ... } 

然後,你做一個ZINTERSTORE

zinterstore leaderboard.male 2 leaderboard members.male 

或者,要獲得男性AU會員的排行榜:

zinterstore leaderboard.au.male 3 leaderboard members.male members.au 

您可以控制如何使用WEIGHTSAGGREGATE來計算得到的排序集的評分。

如果您不想長時間保存結果集,那麼您可以使用EXPIRE這些設置,並且只有在不存在的情況下才能創建新設置。

+0

謝謝,這似乎是最靈活的解決方案。 – 2012-03-28 22:30:14