我有一個Redis的哈希如如何獲得redis hash值的數量?
key field value
1000 state "ca"
1000 zip "95054"
2000 state "ca"
2000 zip "95050"
3000 state "ny"
3000 zip "12345"
我怎麼能回答這樣多少狀態是「CA」的問題。我需要爲一個字段計數值。可能嗎 ?幫助將不勝感激。
-Avi
我有一個Redis的哈希如如何獲得redis hash值的數量?
key field value
1000 state "ca"
1000 zip "95054"
2000 state "ca"
2000 zip "95050"
3000 state "ny"
3000 zip "12345"
我怎麼能回答這樣多少狀態是「CA」的問題。我需要爲一個字段計數值。可能嗎 ?幫助將不勝感激。
-Avi
我認爲你需要存儲單獨計數爲唯一值。你可以得到單個散列的長度,但當你在這種情況下得到三個不同的密鑰時不會。
命令鍵字段值
HSET千狀態 「CA」
HSET千拉鍊 「95054」
INCR CA
HSET 2000狀態 「CA」
HSET 2000 zip「95050」
INCR CA
HSET 3000狀態 「NY」
HSET 3000拉鍊 「12345」
INCR紐約
如果你想獲得多少哈希與國家 「CA」 鍵用途:
GET CA
我打算假設上面的數據是城市列表。真的,你可以考慮存儲這些像...
key value
city:1000:state "ca"
city:1000:zip "95054"
city:2000:state "ca"
city:2000:zip "95050"
現在回到你的問題......在SQL中,你可能想要做這樣的事情:SELECT COUNT(*)FROM城市,狀態=「CA」 。或者,如果你想爲每個州的計數...選擇狀態,計數(*)從城市GROUP BY狀態。
在我看來,這是Redis掙扎了一下,但它使您能夠重新考慮您的數據庫設計。如果您計劃像這樣執行一個查詢,請考慮創建一個新的Sorted Set狀態集。在這種情況下,得分將是你的計數。使用ZINCRBY(當我們在城市「表格」中添加/刪除記錄時,我們稱之爲city_count_by_state)。現在你的查詢是這樣的:ZRANK city_count_by_state'CA'。添加/刪除/獲取排序集的排名在O(log(n))時間運行。
如果您不想使用排序集的浪費記憶,您可以使用密鑰返回城市「表」中的所有密鑰的大量列表。然後,您的程序可以自動遍歷這些密鑰並計算有多少個城市具有「CA」狀態。這是一點體力勞動,但它仍然會在O(n)時間運行。
如果您已經在數據庫中預先填入了城市數據,那麼您也可以使用KEYS(請參閱上面概述的方法)生成已排序集。希望這有助於!
參見:
假設你負責在哈希插入值,那麼使用多/ EXEC包散列插入和適當INCRS。因此,採取ptzOn的方法,但不要忘記把它包裝在MULTI/EXEC中以具有原子語義。在哈希上做同樣的事情刪除並使用DECR。