2016-03-30 25 views
4

一部のデータをredisでキャッシュし、存在する場合はredisからデータを読み取ります。それ以外の場合はデータベースからデータを読み取り、redisでデータを書き込みます。 datebaseを更新した後 データベースを更新した後にredisを更新するには?

  • 更新Redisの直後に期限切れにするRedisの中

    1. セットキー:

      は、私はいくつかのdatabase.For例を更新した後のRedisを更新する方法があることを見つけます。

    2. データをMQに入れ、消費者を使用してredisを更新します。

    私はちょっと混乱していて選択方法はわかりません。

    それぞれのメリットとデメリットを教えてください。また、この問題についてredisを更新する方法やブログを推薦する方法を教えてください。

  • +1

    他の人が簡単に読むことができるように、質問の書式を設定する必要があります。私はあなたの質問の体をどのように修正したのかを確認し、次回このようにします... –

    +0

    ありがとう。私は次回にそれに注意を払う。 –

    +0

    問題はありません;)あなたが答えを得ることは難しいでしょう。 –

    答えて

    4

    実際のデータストアとキャッシュは、質問で既に説明した3番目のアプローチを使用して同期する必要があります。

    確定ストア(つまりSQLデータベース)にデータを追加するときに、このデータをサービスバスまたはメッセージキューにエンキューし、何らかのバックグラウンドプロセスを使用して一部の非同期サービスで同期全体を実行させる必要があります。

    あなたは(サービスバスと非同期サービスを使用しない場合)は、この例に取得したくない:

    • ユーザーは、データが両方に格納されるまで待つ必要があるので、あなたの要求やプロセスが遅くてくださいあなたのデータベースとキャッシュ。
    • キャッシュ処理中に失敗し、再試行ポリシー(通常はサービスバスまたは一部のメッセージキューに組み込まれている機能)を持つことができないという危険性があります。また、この障害は部分的または完全なキャッシュ破損に終わることがあり、この状況を修正するためのタスクを自動的かつ簡単にスケジュールすることはできません。

    Redisキーの有効期限の使用については、良い考えです。 Redisは組み込みのメカニズムを使用してキーを期限切れにすることができるため、バックグラウンド・プロセス全体からキーの有効期限を実装すべきではありません。キーが存在する場合、それはまだ有効なためです。

    ところで、必ずしもそうではありません(キーが期限切れでない場合は、上書きしないでください)。実際のドメインに依存する可能性があります。

    +0

    ありがとう、それは役に立ちます:) –

    +0

    こんにちは、私はredis失敗またはMQの故障を更新した場合、別の質問があります、それは汚れた読み込みを引き起こすでしょう、私はどのように汚れた読み取りを処理するか知りたいですか?ありがとう –

    +0

    肯定応答で永続MQを使用しようとしました。 1. Redisが失敗した場合は、MQに応答がないので、自動的に再試行します。 MQブレークダウンの場合は、MQが永続的に再開したときに再試行されます(少し遅くなります) – Raghavendra

    関連する問題