2 つの Redis インスタンス (または 2 つのそれぞれの dump.rdb ファイル) があり、それぞれの初期インスタンスに 1 つずつ、2 つのデータベースを持つ単一のインスタンスにそれらを結合したいと考えています。
MIGRATE を使用してこれを行うこともできますが、現在の Redis サーバーではサポートされていない Redis 2.6.0 でのみ使用できます。
2 つの Redis インスタンス (または 2 つのそれぞれの dump.rdb ファイル) があり、それぞれの初期インスタンスに 1 つずつ、2 つのデータベースを持つ単一のインスタンスにそれらを結合したいと考えています。
MIGRATE を使用してこれを行うこともできますが、現在の Redis サーバーではサポートされていない Redis 2.6.0 でのみ使用できます。
この回答は、新しいバージョンの redis では正確ではなくなりました。歴史的な理由から答えを残します。
バイナリ ファイルを少しいじってみたい場合は、2 つの dump.rdb ファイルを簡単に 1 つに結合できます。
仮定:
ファイルを 16 進エディタで開くと、RDB ファイルの形式は次のようになります。
REDIS000x FE 00 <actual data > FF
ここ -
000x
rdb のバージョン番号です。あなたの場合は0002または0003である可能性が最も高いですFE
はデータベース セレクタ、00
はデータベース番号です。<actual data>
現在のデータベースのキーと値のペアです。現在の目的では、これをバイナリ BLOB として扱うことができます。FF
ファイルの最後のバイトであり、rdb ファイルの終わりを示しますしたがって、2 つの rdb ファイルをマージするには、次のようにします -
FF
FE 01
2 番目のデータベースの開始を示すために2 バイトをコピーしますFE 01
上記の 2 バイトをスキップしてください。REDIS000x FE 00
FF
この新しい dump.rdb を redis の適切なディレクトリにコピーして、再起動できます。
興味がある場合は、ここに redis ダンプ ファイル形式の完全なドキュメントがありますが、この単純な使用例についてすべてを理解する必要はありません。
これは、4 つの Redis サーバー (2.4.x を実行) を 2 つに統合するために使用した手法です (私は、2 つの個別の Redis インスタンス (それぞれが db0 にデータを持つ) を 2 つの個別のデータベースを含む 1 つに 2 回結合しました)。
redis.conf
して使用しますslaveof
)。sed -e 's/\"db\":0/\"db\":3/' orig.json > db_3.json
redis-load
コマンドを使用して、データを含む JSON ファイルをインスタンス B から Foo にインポートします。
<new.json redis-load -u host:port -d 3
これで、A のデータが db0 に、B のデータが db1 にある単一の Redis インスタンス (Foo) ができました。
結構苦労したので、ダンプと復元を使ったpythonスクリプトを作りました。1 つのデータベースをディクショナリ オブジェクトにシリアル化し、ピクルします。別のスイッチを使用すると、picled ファイルがロードされ、データが他の redis インスタンスにアップロードされます。