2012-02-29 16 views
4

同じredis listデータ構造にアクセスしているクライアントが2つあるとします。 1つはLPOPを実行し、他のものは同じリストでRPUSHを実行しています。これらの2つのクライアントが並行して実行されている場合、それらの間に競合が存在しますか?並列実行されているクライアントが別のmylistにアクセスしている場合でも、あるクライアントがアクセスしているときに、Redisはその下のmylistをロックしますか?Redisでブロックされることなく、複数のクライアントが同じリストに同時にアクセスできますか?

Client 1 
RPUSH mylist a 
RPUSH mylist b 

Client 2 
LPOP mylist 
LPOP mylist 

クライアント1とクライアント2が並行して実行されています。 このようなシナリオで競合が発生するかどうかを教えてください。

答えて

6

Redisはシングルスレッドなので、それに来るすべてのコマンドはアトミックに実行されます(保証されます)。 redisのデータ構造への並列/同時アクセスはないため、シナリオでは誰が最初に実行するのかを知ることはできません。

+3

終了時には、すべてのコマンドが順番に処理されます。最初に来る者は、奉仕する。多重化とは、すべての受信コマンドがリスニングソケットからどのように取り出され、実行のためにシリアライズされるかを指します。しかし、真剣に、あなたのケースは、並行性のランダム性の影響を強く受けます。 – hymloth

0

MULTI/EXECを使用してトランザクションを作成しない限り、1つのクライアントPOPSが他のクライアントがPUSH N値に終了する競合状態を避けるため、MULTI/EXECを使用しない限り、1つは他をブロックしません。

関連する問題