2013-10-29 24 views
3

在Redis的DB總結所有關鍵的價值,我有許多關鍵的字符串類型,以節省dowloads時間與應用, 例如:如何在Redis的

Key   value 
20131028:1   100 
20131028:2   15 
20131028:3   10 
.......... 

我要總結的所有鍵的所有值通過redis命令,請幫我解決它。非常感謝。

回答

12

Redis不是爲了做這種事情而設計的。您最好由RDBMS,MongoDB或類似ElasticSearch的服務。

不過,如果你需要做的是(從一個shell啓動):

$ redis-cli keys '20131028:*' | awk '{print "get "$1}' | redis-cli | awk '{x+=$1} END { print x }' 

一種其他的方式來做到這一點是使用Lua的服務器端腳本:

$ redis-cli eval "local keys = redis.call('keys',KEYS[1]) ; local sum=0 ; for _,k in ipairs(keys) do sum = sum + redis.call('get',k) end ; return sum" 1 '20131028:*' 

在這兩種情況下,如果您在Redis實例中有許多密鑰,性能將會下降,並且在掃描密鑰時,實例將被阻止用於所有連接。

+0

它工作。非常感謝Didier Spezia。 –

+0

爲了防止有人絆倒這個答案,另一個不錯的選擇(如果可以的話)是在用[INCRBY](https://redis.io/commands/incrby)存儲的單獨密鑰中添加值。然後,只需獲得之前計算的值。 – Lisandro

0

我認爲最好使用mget並用一個命令獲取所有密鑰,而不是爲每個密鑰發出一個命令。通過這種方式,只需一次調用redis即可獲得所有結果,只需對其進行總結即可。當然這隻有在事先知道密鑰時纔有效...