2011-10-29 28 views
1

比方說,我有特性的一組對象:多參數匹配+加權隨機挑中的Redis

 
Object Quantity Color Shape Kind 
---------------------------------------- 
APPLE 12  RED ROUND FRUIT 
APPLE 3  GREEN ROUND FRUIT 
ORANGE 6  ORANGE ROUND FRUIT 
CARROT 0  RED CONICAL VEGETABLE 
RADISH 24  RED ROUND VEGETABLE 

對象和數量以外的所有屬性都表示爲字符串。數量是一個數字。

我必須根據用戶的查詢編寫一個隨機的對象列表。

查詢包含所有字符串屬性(即除數量外的所有屬性)的值。

查詢中的值可能是精確的屬性值或通配符(意思是「任何值將對此屬性執行操作」)或否定 - 「不是此確切屬性值」。

查詢結果是一個對象,由具有匹配屬性的所有對象加權隨機選取。隨機選擇的權重是數量。

例如:

 
Query     -> Probabilities     -> Example 
                   random result 
----------------------------------------------------------------------------- 
*  ROUND FRUIT  -> APPLE 12/APPLE 3 = APPLE 15 -> APPLE 

!GREEN ROUND FRUIT  -> APPLE 12/ORANGE 6    -> ORANGE 

RED *  *   -> CARROT 0/APPLE 12/RADISH 24 
          = APPLE 12/RADISH 24    -> RADISH 

RED CONICAL VEGETABLE -> CARROT 0 
          = (none)       -> (none) 

對於自我教育的目的,我想建立使用Redis的用於數據存儲的這個系統。

問題是 - 如何優雅地使用最少量的應用程序邏輯(而不是in-Redis操作)?權重和否定類破壞圖像。否則它會是nicely doable with sets

歡迎任何提示。

回答

0

由於redis只能查詢密鑰而不是值,所以一個好的選擇是將每個對象的各個值存儲在不同的redis列表中。

例如,當您添加的對象...

APPLE 12 RED圓果

你將它保存爲

hmset OBJ:1名蘋果數量12紅色形狀圓形樣水果

然後......

薩德名稱:蘋果OBJ:1,

SADD顏色:紅色OBJ:1個

SADD形狀:圓形OBJ:1

這樣,你有辦法直接詢問集和能夠選擇使用基於隨機數的對象,例如,返回的集合中的項目總數。

希望有所幫助。如果你需要更多的解釋,請打我。