2

私は最近 redis をよく使っていて、本当に気に入っています。私はほとんど永続性 (rdb と aof) に精通しています。ひとつ気になることがあります。重要でなくなったデータの一部をディスク (または安価なストレージ) に選択的に「アーカイブ」できるようにしたいと考えています。ある時点で価値があるかもしれないので、私は本当にそれを削除したくありません.

私のすべてのキーの名前はid_<id>_<someattribute>. したがって、id 4 を使い終わったら、一致するすべてのキーを「アーカイブ」したいと思いますid_4_*。コマンド ラインで簡単に表示できますが、何もできません。私はこのデータ セットに関連付けられたかなりの量のデータ (非常に大きなビットマップ) を持っています。

これが mysql の場合、さまざまなテーブルがあり、非常に簡単にそれを .sql ファイルにダンプしてから、テーブルを削除します。実際の .sql ファイルは直接役に立ちませんが、必要に応じてデータを再インポートできます。または、mysql データベースが必要で、あるテーブルを別のデータベースに移動したいのかもしれません。これらのプロセスに redis の必然性はありますか? データのサブセットである rdb または aof ファイルを作成する方法はありますか?

この問題に関するヘルプや意見をいただければ幸いです。ありがとう!

4

3 に答える 3

3

@Hoseong Hwang が最近私が何をしたかを尋ねたので、私が何をしたかを投稿します。

実際、それは非常に単純でした。キースペースがさまざまなユーザーによってセグメント化されているという事実は、私に恩恵をもたらしました。私のキーはすべて構造体でしたuser_<USERID>_<OTHERVALUES>。私のアーカイブのニーズはユーザー単位でした。一部のユーザーのデータは、redis に保持する必要がなくなりました。

redis-serverそのため、ローカルの別のポート (6380?) または別のマシンで の別のインスタンスを起動しましたが、違いはありません。次に、基本的に呼び出すだけの短いスクリプトを作成しましたKEYS user_<USERID>_*( のブロッキングの性質は理解してKEYSいます。私のキー スペースは非常に小さいので問題ありません。それが問題である場合は使用できSCANます)。次に、キーごとに、それらをその新しいインスタンスにMIGRATE D します。redis-serverそれらがすべて完了した後。SAVEそのインスタンスのrdbファイルが最新であることを確認しました。これで、アーカイブしたかったコンテンツだけの rdb ができました。その後、一時的に終了しredis-server、メモリが回収されました。

次に、安価で安全な保管のために、その rdb ファイルをどこかに保管してください。そして、再びそれが必要になった場合は、上記のプロセスの逆を行ってそれらのキーをメインに戻すのredis-serverはかなり簡単です.

于 2016-07-03T16:51:51.977 に答える
1

アーカイブ目的でライブ Redis インスタンスからデータを抽出しようとする代わりに、ダンプ ファイルからデータを抽出することをお勧めします。

bgsave コマンドを実行してダンプを生成し、redis-rdb-tools を使用して目的のキーを抽出します。結果は json ファイルとして簡単に取得できます。

https://github.com/sripathikrishnan/redis-rdb-toolsを参照してください

json データをフラット ファイルに保存するか、検索目的でインデックスを作成する必要がある場合は、リレーショナル データベースまたはドキュメント ストアに保存してみてください。

于 2013-07-02T12:06:14.460 に答える