복붙노트

[REDIS] 여러 클라이언트가 레디 스에서 차단받지 않고 동시에 동일한 목록에 액세스 할 수 있습니다?

REDIS

여러 클라이언트가 레디 스에서 차단받지 않고 동시에 동일한 목록에 액세스 할 수 있습니다?

같은 레디 스리스트 자료 구조에 액세스하는 두 클라이언트가 가정하자. 하나는 LPOP을 수행하고, 다른 하나는 동일한 목록에 RPUSH을 다하고 있습니다. 가 병렬로 실행중인 경우이 두 클라이언트 사이에 경합이있을 것인가? (아래) 윌 레디 스 잠금 myList를 하나의 클라이언트가 병렬로 실행되는 클라이언트으로 myList의 다른 끝을 액세스하는 경우에도, 그것을 액세스하는?

Client 1
RPUSH mylist a
RPUSH mylist b

Client 2
LPOP mylist
LPOP mylist

클라이언트 1 및 클라이언트 2는 병렬로 실행하고 있습니다. 이러한 시나리오에서 경합이 될 경우 알려주세요.

해결법

  1. ==============================

    1.여기에 나오는 모든 명령이 (보장) 원자 실행되도록 레디 스는 단일 스레드입니다. 레디 스 '데이터 구조에는 병렬 / 동시 접속이 그래서 당신의 시나리오에서 먼저 실행거야 누가 말할 수 없다.

    여기에 나오는 모든 명령이 (보장) 원자 실행되도록 레디 스는 단일 스레드입니다. 레디 스 '데이터 구조에는 병렬 / 동시 접속이 그래서 당신의 시나리오에서 먼저 실행거야 누가 말할 수 없다.

  2. ==============================

    2.당신은 경쟁 조건을 피하기 위해 트랜잭션을 생성 MULTI / EXEC를 사용하지 않는 한, 다른를 차단하지 않습니다 경우 PUSH의 N 값에 다른 클라이언트 완료되기 전에 하나의 클라이언트 POPS.

    당신은 경쟁 조건을 피하기 위해 트랜잭션을 생성 MULTI / EXEC를 사용하지 않는 한, 다른를 차단하지 않습니다 경우 PUSH의 N 값에 다른 클라이언트 완료되기 전에 하나의 클라이언트 POPS.

  3. from https://stackoverflow.com/questions/9494502/can-multiple-clients-access-same-list-concurrently-without-getting-blocked-in-re by cc-by-sa and MIT license