2017-05-22 1 views
0

리스트의 api LPOP처럼 Redis Sorted Set의 pop 멤버를 지원하는 좋은 방법이 있습니까?Redis Sorted Set의 팝 멤버를 지원하는 좋은 방법이 있습니까?

Redis Sorted Set에서 메시지를 poping하기 위해 알아 낸 것은 ZRANGE + ZREM을 사용하지만 스레드 보안이 아니며 다른 호스트에서 동시에 액세스하는 다중 스레드 일 때 분산 잠금이 필요합니다.

정렬 된 집합에서 멤버를 팝하는 더 좋은 방법이 있다면 제안 해주십시오.

답변

1

작업을 수행하기 위해 Lua script을 작성할 수 있습니다.이 두 명령을 단일 루아 스크립트로 묶습니다. Redis는 루아 스크립트가 원 자성 방식으로 실행되도록합니다.

local key = KEYS[1] 
local result = redis.call('ZRANGE', key, 0, 0) 
local member = result[1] 
if member then 
    redis.call('ZREM', key, member) 
    return member 
else 
    return nil 
end 
+0

다른 호스트 서버에서 동시 멀티 스레드 작업을 지원합니까? –

+0

@ Jason 물론, 그렇습니다. 그래서 원자력 방식으로 작동한다고 말합니다. 자세한 내용은 문서를 참조하십시오 :) –

+0

불행히도, 내 응용 프로그램은 루아 대신 Java를 사용합니다. –