2017-11-07 6 views
1

私は、「キーサイズ」(すなわちhttps://redis.io/commands/objectredisキーサイズには、そのキーのデータサイズまたはキー自体のデータサイズも含まれますか?

についてのドキュメントを読んだのRedis DBのDBサイズをanalyiseや、 https://davidcel.is/posts/the-story-of-my-redis-database/https://engineering.instagram.com/storing-hundreds-of-millions-of-simple-key-value-pairs-in-redis-1091ae80f74c

など、いくつかの記事ごとの我々のデータのストレージを微調整しようとしています

などさまざまなツール実行しようとした:

redis-cli --bigkeys 

を、またRedisの-CLIからの出力を読み取ることを試みた:

INFO memory 

サイズの意味は私には分かりません。

が報告されたサイズは、ONLYキー自体のサイズを反映してい、私の鍵は「ABC」、すなわち場合は、値が「VALUE1」で報告されたサイズは、「ABC」の部分です?ハッシュ/配列やリストなど、そのキーの複雑なデータ構造に関しても同じ質問です。

試行錯誤しても明らかな結果が得られないようです。

答えて

0

さまざまなツールでさまざまな回答が得られます。

最初に約--bigkeysを読んでいます - 鍵の名前で取られたスペースを除いて、キースペースに大きな値のサイズを報告します。この場合、値のサイズはデータ型ごとに異なることを意味します。つまり、文字列のサイズはSTRLEN(バイト)ですが、その他はすべてそのネストされた要素の数で表されます。

基本的には、実際の使用状況をほとんど示していないが、意図した通りに大きなキー(大きなキー名ではなく、大きな値の推定値)を見つけることを意味します。

INFO MEMORYは別の話です。 used_memoryはバイトで報告され、キー名、その値、および内部データ構造のすべての関連するオーバーヘッドのRAM消費全体を反映します。

ありDEBUG OBJECTが、それは、出力はRedisの中のキーのメモリ消費量を測定するための信頼できる方法ではないということに注意してください - serializedlengthフィールドは、オブジェクトを永続化するために必要なバイト数で与えられている、していない様々な含むメモリ内の実際のフットプリントデータそのものの管理上のオーバーヘッド。

最後に、v4では、より良い仕事をするMEMORY USAGEコマンドがあります。詳細はhttps://github.com/antirez/redis-doc/pull/851を参照してください。

+0

「ビッグキー」や「キー名」などと言ったときに「キー値ペア」のサイズを参照していますか?ハッシュタイプ(すなわち、hset outer_key inner_key値)に関しては、キーのサイズが全体のシャープルを参照していますか? (鍵のフルサイズとそれが参照するハッシュ?)。キーが非常に長い(50文字)場合がありますが、値が非常に短い(1桁の値など)場合と、値がキーの5〜10倍の場合があります。あなたの明確化のためにありがとう –

+0

キー名は値のないキーの唯一の名前であり、 "ビッグキー"はそのサイズが含まれていません。 'MEMORY USAGE'は、関連する値と関連する管理オーバーヘッドの見積もり(サンプルに依存します)を提供しますが、キー名の「コスト」も含みません。また、原則として、長いキー名を避けるようにしてください。 –

+0

キーで使用されているメモリとその値を人間が判読可能なバイト数で取得するのにどのようなコマンドを使用しますか? (値は "普通"、つまり文字列、数字、バイナリなど、複雑な型、例えばハッシュ、セット、リスト) –

関連する問題