[REDIS] 여러 클라이언트가 레디 스에서 차단받지 않고 동시에 동일한 목록에 액세스 할 수 있습니다?
REDIS여러 클라이언트가 레디 스에서 차단받지 않고 동시에 동일한 목록에 액세스 할 수 있습니다?
같은 레디 스리스트 자료 구조에 액세스하는 두 클라이언트가 가정하자. 하나는 LPOP을 수행하고, 다른 하나는 동일한 목록에 RPUSH을 다하고 있습니다. 가 병렬로 실행중인 경우이 두 클라이언트 사이에 경합이있을 것인가? (아래) 윌 레디 스 잠금 myList를 하나의 클라이언트가 병렬로 실행되는 클라이언트으로 myList의 다른 끝을 액세스하는 경우에도, 그것을 액세스하는?
Client 1
RPUSH mylist a
RPUSH mylist b
Client 2
LPOP mylist
LPOP mylist
클라이언트 1 및 클라이언트 2는 병렬로 실행하고 있습니다. 이러한 시나리오에서 경합이 될 경우 알려주세요.
해결법
-
==============================
1.여기에 나오는 모든 명령이 (보장) 원자 실행되도록 레디 스는 단일 스레드입니다. 레디 스 '데이터 구조에는 병렬 / 동시 접속이 그래서 당신의 시나리오에서 먼저 실행거야 누가 말할 수 없다.
여기에 나오는 모든 명령이 (보장) 원자 실행되도록 레디 스는 단일 스레드입니다. 레디 스 '데이터 구조에는 병렬 / 동시 접속이 그래서 당신의 시나리오에서 먼저 실행거야 누가 말할 수 없다.
-
==============================
2.당신은 경쟁 조건을 피하기 위해 트랜잭션을 생성 MULTI / EXEC를 사용하지 않는 한, 다른를 차단하지 않습니다 경우 PUSH의 N 값에 다른 클라이언트 완료되기 전에 하나의 클라이언트 POPS.
당신은 경쟁 조건을 피하기 위해 트랜잭션을 생성 MULTI / EXEC를 사용하지 않는 한, 다른를 차단하지 않습니다 경우 PUSH의 N 값에 다른 클라이언트 완료되기 전에 하나의 클라이언트 POPS.
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
'REDIS' 카테고리의 다른 글
[REDIS] 연결은 - 레디 스 - 경쟁 조건에 대한 세션 개체를 보호하는 방법 (0) | 2020.01.17 |
---|---|
[REDIS] 어떻게 레디 스 높은 처리량과 성능을 달성 하는가? (0) | 2020.01.17 |
[REDIS] 스프링 데이터의 2.0.x에서 RedisCacheManager을 만드는 방법 (0) | 2020.01.17 |
[REDIS] ServiceStack 엔티티 ID 필드 이름 (0) | 2020.01.17 |
[REDIS] 수평 레디 스와 socket.io를 확장 (0) | 2020.01.17 |