私の解決策は:
このソリューションは大丈夫ですか?
そして、この仕事をするための最良の戦略は何ですか?
何もハッキングする必要はありません;)
Mysqlのデータが必要な理由は完全にはわかりません。私が知っていれば、もっと適切な答えがあるかもしれません。いずれにせよ、一般的な答えとして、 redis keyspace notifications を使用できます。
キーに対してコマンドHSET、HMSET、HDEL、DELをサブスクライブできるため、キーが削除されるか、ハッシュ値が設定または削除されるたびに通知が届きます。
通知を見逃した場合、不整合が生じることに注意してください。したがって、たまにSCANコマンドを使用してすべてのキーを確認し、mysqlを更新する必要があるかどうかを確認することができます。
別の戦略は、2つの別々の構造を維持することです。 1つは値を含むハッシュで、もう1つは更新のタイムスタンプでソートされたすべての値のZSETです。両方の構造を最新に保つ最良の方法は、ハッシュとzsetをアトミックに操作する2つまたは3つのluaスクリプト(挿入/更新および削除)を記述することです。
次に、最後の同期操作よりもタイムスタンプが高い要素のZSETを定期的に照会し、更新されたすべてのキーを取得します(2番目のZSETを排他的に保持したくない場合を除き、削除されたキーが含まれます)。キーですべての要素を取得し、mysqlに同期します。
それがあなたのために働くことを願っています!
redis replication プロトコルを実装できます。
しかし、あなたの要求のために githubプロジェクト があります。
安定版は2.5.0です
<dependency>
<groupId>com.moilioncircle</groupId>
<artifactId>redis-replicator</artifactId>
<version>2.5.0</version>
</dependency>
Redisの値を更新する場合、値をRedisのリストなどの他の「キュー」に配置できます。次に、キューの値を使用してMysqlを更新します。
Redisデータが多すぎない場合は、スケジューラを使用してすべてのデータをMysqlにバッチフラッシュするだけです。