在Redis的DB總結所有關鍵的價值,我有許多關鍵的字符串類型,以節省dowloads時間與應用, 例如:如何在Redis的
Key value
20131028:1 100
20131028:2 15
20131028:3 10
..........
我要總結的所有鍵的所有值通過redis命令,請幫我解決它。非常感謝。
在Redis的DB總結所有關鍵的價值,我有許多關鍵的字符串類型,以節省dowloads時間與應用, 例如:如何在Redis的
Key value
20131028:1 100
20131028:2 15
20131028:3 10
..........
我要總結的所有鍵的所有值通過redis命令,請幫我解決它。非常感謝。
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實例中有許多密鑰,性能將會下降,並且在掃描密鑰時,實例將被阻止用於所有連接。
我認爲最好使用mget並用一個命令獲取所有密鑰,而不是爲每個密鑰發出一個命令。通過這種方式,只需一次調用redis即可獲得所有結果,只需對其進行總結即可。當然這隻有在事先知道密鑰時纔有效...
它工作。非常感謝Didier Spezia。 –
爲了防止有人絆倒這個答案,另一個不錯的選擇(如果可以的話)是在用[INCRBY](https://redis.io/commands/incrby)存儲的單獨密鑰中添加值。然後,只需獲得之前計算的值。 – Lisandro