2016-04-01 3 views
1

スレッドの安全性を知っています。いくつかのシナリオでは、それは完璧な感覚を作ります。たとえば、私はロガーがスレッドセーフである必要があることを理解しています。そうでなければ、同じファイルを開き、複数のスレッドからのアクセスにアクセスしようとする可能性があります。キャッシュが複数のプロセス(Redis)からアクセスされているときにスレッドの安全性が必要なのでしょうか?

しかし、キャッシュにアクセスする際にスレッドの安全性が重要である理由を私は視覚化できません。複数のスレッドから取得/設定するとキャッシュが壊れる可能性があります。

最も重要なのは、スレッドの安全性が必要な場合(キャッシュにアクセスしている間)、複数のプロセスからキャッシュにアクセスする際にどのように使用できるかです。レディスの文脈で誰かが答えることができればいいと思う。アドバンス

答えて

0

私はそれに関する直接のテキストを持っていませんが。しかし、それはロック(または他の方法の同期)がサーバー側に適用されているようです。そして、データが複数のスレッド/プロセスから壊れていないことを確認します。

そして、なぜクライアントライブラリをスレッドセーフにするのが重要なのかは、TCP接続(私が推測するネットワークストリーム経由)で書き込み/読み取りを行うためです。同じクライアントが複数のスレッドで使用されている場合、クライアントがスレッドセーフである場合にはうまく動作することが重要です。そうでなければ、クライアントが複数のスレッド間で共有してはならないというドキュメントになります。

私はこれを正解としてマークしていません。人々がこれを投票し、それに同意するならば、私はそれをします。

1

のRedisで

おかげでシングルスレッドです。したがって、レディスのすべてのコマンドは原子です。ただし、クライアントライブラリの実装によっては、接続の共有に問題が生じることがあります。あるスレッドが他のスレッドがクライアント側で問題を引き起こすと思われる読み込みを取得できるように、読み書きの可能性があります。これは、書き込みの欠落または無効な応答による書き換えの原因となる可能性があります。

このように、Redisのデータはあまり壊れておらず、クライアント側でデータが漏れるという懸念があります。他の人のアイテムがあなたに請求されているショッピングカートを例に考えてみましょう。このため、クライアントアクセスはスレッドセーフである必要があります。