Redis DB では、アプリケーションでのダウンロード時間を節約するために、文字列型に多くのキーがあります。例:
Key value
20131028:1 100
20131028:2 15
20131028:3 10
..........
redisコマンドですべてのキーのすべての値を合計したいのですが、解決するのを手伝ってください。どうもありがとう。
Redis は、この種のことを行うようには設計されていません。RDBMS、MongoDB、または ElasticSearch のようなものがより適切に機能します。
それでも、それを行う必要がある場合 (シェルから起動する場合):
$ 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 インスタンスに多くのキーがあるとパフォーマンスが低下し、キーがスキャンされている間、インスタンスはすべての接続に対してブロックされます。
キーごとに 1 つのコマンドを発行するのではなく、mget を使用して 1 つのコマンドですべてのキーをフェッチする方がよいと思います。そうすれば、redis を 1 回呼び出すだけですべての結果を取得でき、それらを合計するだけで済みます。もちろん、これは事前にキーを知っている場合にのみ機能します...