7

Redis DB では、アプリケーションでのダウンロード時間を節約するために、文字列型に多くのキーがあります。例:

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

redisコマンドですべてのキーのすべての値を合計したいのですが、解決するのを手伝ってください。どうもありがとう。

4

3 に答える 3

16

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 インスタンスに多くのキーがあるとパフォーマンスが低下し、キーがスキャンされている間、インスタンスはすべての接続に対してブロックされます。

于 2013-10-29T10:31:31.073 に答える
0

キーごとに 1 つのコマンドを発行するのではなく、mget を使用して 1 つのコマンドですべてのキーをフェッチする方がよいと思います。そうすれば、redis を 1 回呼び出すだけですべての結果を取得でき、それらを合計するだけで済みます。もちろん、これは事前にキーを知っている場合にのみ機能します...

于 2014-02-25T14:03:37.100 に答える