RedisとMysqlデータ同期ソリューションの整理

3000 ワード

最近、データベースMySQLにRedisデータを同期する機能をしています.
自分で考えてみれば、大まかな案もある.
1.キューは同期して、データと2部を変更して、メッセージキューを使って、1部はRedisに消費して、1部はMysqlに消費します.
2.バックグラウンドタイミングタスクで、Redisの情報をデータベースに定期的にリフレッシュします.
ネットでもあちこちで解決策を探しています
シナリオ1:
読み取り:redisを読みます->いいえ、mysqlを読みます->mysqlデータをredisに書きます
書き込み:mysql->成功、redisを書きます.
読むなら、まずRedisを読み、Redisはデータベースを読まず、データベースのデータをRedisに入れます.
書き込み(添削)、データベースを書き、その後Redisを書きます.
これに対して、一貫性の高いデータ、例えば金融、取引データなどのデータベースから読むなど、少し最適化することができます.一貫性を求めてReidsから読み込まないでください.
シナリオ2:
binlogベースmysql_の使用udf_redis、データベース内のデータをRedisに同期します.
シナリオ3:
MQに基づいて、つまり一番上に考えた方法1です.
シナリオ4:
公式にはmemcachedのudfプラグインがありますが、そんなに強くredisを必要としないなら、考えてもいいです.
シナリオ5:
Mysql+Redisの代わりにPOTGRESQLを使用します.
各種案の弊害
しかし、上記の案にはそれぞれの弊害がある.
シナリオ1は、明らかにデータ量が大きく、更新が頻繁なデータ書き込みにはどうしようもない.たとえば、数が膨大で、各変更ステータスが頻繁であるため、データベースを書き込みやすくなります.
シナリオ2は、使用するmysqlのUser Defined Function機能、mysql_udf_redisは誰かが実現したデータをRedisに同期する機能であり、弊害:学習コストが必要であり、サードパーティのプラグインが不安定である.
シナリオ3:データベースとRedisへのステータスの一貫性を保証する方法.キューからMysqlへの書き込みに成功したが、Redisへの書き込みに失敗したと仮定します.また、Kafka、RabbitMqなどのサードパーティ製のメッセージキューが必要で、管理が不便で、システム全体の安定性が悪く、しかもこのような比較的小さなボックスデータ情報の同期だけです.鶏を殺すための牛刀が少しあります.
その他のシナリオ:
サブスクリプションkeyの変化はデータベース更新を行い、書くときは2部書き、1部はRedisに書き、1部はRedisデータのkeyネットワーク更新キュー(直接Reidsメモリも可能)に書き、さらにタイミングプログラムを書いて更新キューから時間を取り、keyに基づいてRedisデータをMysqlに取り出す.
このスキームは、実際には他のものとは異なり、メモリの消費量が大きいのが弊害です.更新キューを維持する必要があるからです.
時間タスクを使用して、Redisの情報をデータベースにブラシすることができます.まずステータスペアリングを行い,ステータスが一致しないセットを入れ,一括updateデータベースを格納する.
実際には、比較するときなど、小さな質問を書くこともあります.
1.Redisのデータの状態がついてきました.どうすればいいですか.私たちは比較の時にRedisをロックすることはできません.200 Wサイクルで、この時間は完全に状態が変化する可能性があります.
2.比較中にデータベースを更新した人がいますが、どうすればいいですか.データベースを直接更新できる操作があるからです.例えばlayoutRowなどの情報を更新します.
Redis同期mysqlには大きく2つの同期があります.1つ目はmysqlがredisに同期します.手動でmysqlデータベースで操作する同期を互換するために、mysqlのbinlogを解析することができます.データベースが増加し、削除され、変更されたときに自動的にredisに同期します.使用できるライブラリは[open-replicator](GitHub-whitesock/open-replicator:Open Replicator is a highperformance SQL Mybinlog parser written in Java.It unfolds the possibilities that you can parse,filter and broadcast the binlog events in a real time manner.)です.
redisデータをmysqlに同期するには[redis-replicator](leonchen 83/redis-replicator)を使用します.

    com.moilioncircle
    redis-replicator
    2.3.1




      mysql       redis   ,  mysql udf    redis api mysql   redis;  c++  redis   ,  mysql  udf,       
     redis

UDFによるmysqlのredisキャッシュのアクティブリフレッシュ
参考にしたいくつかの大神の文章:
1. <>:http://coolshell.cn/articles/17416.html
2. <>:http://coolshell.cn/articles/10910.html
3. <>:http://www.cnblogs.com/linjiqin/p/3569011.html