2012-12-28 54 views
3

REDIS專家請幫忙。我想在redis哈希中進行計數和搜索。REDIS哈希計數和搜索HMSET

我的用戶數據:

| id | name | age | country | 
| 1 | jaspal | 32 | US 
| 2 | singh | 45 | UK 
| 4 | manjot | 24 | US 
| 5 | tarleen | 20 | UK 
| 7 | daljeet | 30 | US 
| 8 | sutdhar | 40 | US 

...等等

我使用HMSET一樣存儲在這個redis的用戶數據:

HMSET user:1 name "jaspal" age "32" country "US" 
HMSET user:2 name "singh" age "45" country "UK" 
HMSET user:4 name "manjot" age "24" country "US" 
HMSET user:5 name "tarleen" age "20" country "UK" 
HMSET user:7 name "daljeet" age "30" country "US" 
HMSET user:8 name "sutdhar" age "40" country "US" 

現在我想如下:

  1. 計算哈希用戶的記錄數量。
  2. 僅獲取記錄WHERE country=US AND age BETWEEN 31 AND 40
+0

一個想法:爲每個國家創建一個單獨的有序集(zset)。在集合中,名字是成員,年齡是分數。這樣你就可以按年齡查詢並找到一個特定的國家。 – akonsu

回答

3

你不能這樣做只有哈希。 Redis不支持按價值搜索;在你的情況下,你需要使用sorted sets來存儲年齡和國家的分數和用戶ID的價值。例如:

zadd user:ages 30 1 34 2 45 3 and so on... 

比你可以選擇所有用戶都在指定的年齡範圍:

zrangebyscore user:ages 30 40 

和國家一樣(你需要使用數字國家的代表)

你可以使用lua腳本在redis端相交或聯合選擇結果

+0

Thanks @atomaltera, – jsxtech

0

要計算散列用戶中的記錄數,請使用HLEN。它返回存儲在密鑰中的哈希中包含的字段的數量。

HLEN user:1

它會返回 '3'。