14

実際、私は 3 つの Redis インスタンスを持っており、これらを 500MB 以上の dump.rdb にまとめました。Redis サーバーはこの dump.rdb を読み取ることができ、すべて問題ないようです。次に、redis-server のメモリが 5.0GB を超えていることに気付きました。どうしてか分かりません。

ファイルに何か問題がありますか? 私のデータベースには約 300 万個のキーがあり、各キーの値には約 80 個の整数が含まれるリストです。

このメソッドを使用して、3 つのインスタンスをまとめます。

PS: 同じサイズと同じキーと値の構造を持つ別の dump.rdb は、1 GB のメモリしか消費しません。

私のデータは keyNum->{num1, num2, num3,......} のようになります。すべての数値は 1 から 4,000,000 の間です。リストを使用してそれらを保存する必要がありますか?今のところ、lpush(k, v) を使用します。この方法は費用がかかりすぎましたか?

4

2 に答える 2

18

メモリとダンプ サイズの比率は、Redis が内部で使用するデータ型によって異なります。

小さなオブジェクト (ハッシュ、リスト、ソートセット) の場合、redis は ziplist を使用してデータをエンコードします。整数で構成される小さなセットの場合、redis は Intset を使用します。ZipList と IntSet は、メモリに格納されるのと同じ形式でディスクに格納されます。したがって、データがこれらのエンコーディングを使用する場合、1:1 の比率が期待されます。

より大きなオブジェクトの場合、メモリ内の表現はディスク上の表現とは完全に異なります。オンディスク形式は圧縮されており、ポインターがなく、メモリの断片化に対処する必要がありません。そのため、オブジェクトが大きい場合、メモリとディスクの比率は 10:1 が正常であり、予想されます。

どのオブジェクトがメモリを消費しているか知りたい場合は、redis-rdb-toolsを使用してデータをプロファイリングします (免責事項: 私はこのツールの作成者です)。そこから、redis.io のメモリ最適化に関する注意事項と、 redis-rdb-toolsのメモリ最適化 wiki エントリに従ってください。

于 2012-11-06T03:36:17.727 に答える
0

それ以上のものがあるかもしれませんが、Redisはダンプファイルを圧縮すると思います。

于 2012-11-06T03:03:04.143 に答える