11

Redis 経由でデータを共有する必要がある 75 台の (そして増え続ける) サーバーがあります。理想的には、75 台のサーバーすべてが、操作を使用して Redis の 2 つのフィールドに書き込みたいと考えていますINCRBYFLOAT。最終的には、これら 2 つのフィールドで毎日数百万回の書き込み操作と数十億回の読み取り操作が行われる可能性があると予想しています。このデータは永続的でなければなりません。

Redis のロックにより、書き込み操作が繰り返し再試行され、同じフィールドを多数同時にインクリメントしようとする可能性があることを懸念しています。

質問:

  • INCRBYFLOAT非常に重い負荷の下で、単一のフィールドで複数の同時実行は悪い考えですか?
  • 外部プロセスで別々のフィールドを「要約」し、代わりに 2 つのフィールドを書き込む必要がありますか? (これにより、別の障害点が発生します)
  • これら 2 つのフィールドの読み取りは、書き込み中にブロックされますか?
4

2 に答える 2

15

Redis はロックしません。また、シングルスレッドです。したがって、競合状態はありません。読み取りまたは書き込みはブロックされません。

何百万もINCRBYFLOATの同じキーで問題なく実行できます。外部プロセスは必要ありません。これらのフィールドを読み取っても問題はありません。

そうは言っても、「2 つのキーに対する何百万回もの更新」は奇妙に聞こえます。ユース ケースを説明できれば、Redis 内でそれを処理するためのより良い方法があるかもしれません。

于 2012-05-18T09:53:41.113 に答える
7

Redisはシングルスレッドであるため、マスタースレーブレプリケーションを使用して書き込みと読み取りを分離することをお勧めします。そうです、書き込みは通常、読み取りをブロックします。

または、このためにApache Zookeeperの使用を検討することもできます。これにより、単一障害点(単一のRedisインスタンスなど)のない信頼性の高いクラスター調整が可能になります。

于 2012-05-18T09:58:40.080 に答える