7

私たちは大きな買い物と商品取引システムを持っています。MySQLで多くの問題に直面したため、いくつかの研究開発の後、Redisを使用することを計画し、Redisをシステムに統合し始めました。これに続いて、以前はデータベースに直接アクセスしていましたが、Redisシステムを移動しました

  1. ユーザーのショッピングカートの詳細
  2. アフィリエイトは追跡記録をクリックします
  3. ユーザーデータを扱う商品があります。
  4. 他のサイトの統計。

私はRedisシステムにデータを保存しているだけでなく、MySQLデータ内のRedisデータを時間間隔で移動するcronを作成しました。これが私が問題に直面している主なポイントです。解決策を探しているベローポイント

  1. ビッグデータをRedisからMySQLにダンプする他の方法はありますか?
  2. Redisはファイルへのデータの保存に失敗するので、そのデータをMySQLデータベースに直接保存することは可能ですか?
  3. Redisには、キューシステムのようなcronを回避できるトリガーシステムがありますか?
4

1 に答える 1

15

Redis から MySQL に大きなデータをダンプする他の方法はありますか?

Redis には、(bgsave を使用して) 非ブロッキングで一貫した方法でデータのダンプを生成する可能性があります。

https://github.com/sripathikrishnan/redis-rdb-tools

Sripathi Krishnan の有名なパッケージを使用して、Python で redis ダンプ ファイル (RDB) を解析し、MySQL インスタンスをオフラインで設定できます。または、Redis ダンプを JSON 形式に変換し、MySQL に入力する任意の言語でスクリプトを記述できます。

このソリューションは、Redis インスタンスの完全なデータを MySQL にコピーする場合にのみ興味深いものです。

Redis には、キュー システムのような cron を回避するために使用できるトリガー システムはありますか?

Redis にはトリガーの概念はありませんが、何かを MySQL にコピーする必要があるたびに Redis キューにイベントを投稿することを妨げるものは何もありません。たとえば、次の代わりに:

# Add an item to a user shopping cart
RPUSH user:<id>:cart <item>

あなたは実行することができます:

# Add an item to a user shopping cart
MULTI
RPUSH user:<id>:cart <item>
RPUSH cart_to_mysql <id>:<item>
EXEC

MULTI/EXEC ブロックは、アトミックで一貫性のあるものにします。次に、cart_to_mysql キューのアイテムを待機する小さなデーモンを作成するだけです (BLPOP コマンドを使用)。デキューされたアイテムごとに、デーモンは関連するデータを Redis から取得し、MySQL インスタンスに入力する必要があります。

Redis はデータをファイルに保存できないため、そのデータを MySQL データベースに直接保存することはできますか?

ここでの質問を理解しているかどうかわかりません。しかし、上記のソリューションを使用すると、Redis の更新と MySQL の更新の間のレイテンシーはかなり制限されます。そのため、Redis が失敗した場合、最後の操作のみが失われます (cron ジョブに基づくソリューションとは対照的です)。もちろん、データの伝播において 100% の一貫性を持つことは不可能です。

于 2012-08-17T19:48:24.147 に答える