복붙노트

[REDIS] 레디 스 키에 대한 액세스를 차단 (ServiceStack)

REDIS

레디 스 키에 대한 액세스를 차단 (ServiceStack)

나는 ServiceStack 레디 스 클라이언트를 사용하여 매우 일반적인 캐싱 시나리오입니다 제가 생각 구현하기 위해 노력하고있어 아직 나는이의 좋은 예를 찾는 어려움을 겪고 있어요.

하는 ASP.NET MVC 응용 프로그램에서, 우리는 외부 웹 서비스에 상대적으로 장기 실행 (및 계량) 전화를하고 일정 기간에 대한 결과를 캐시합니다. 캐시 구현에서는, 웹 서비스 호출이 완료 될 때까지 추가 (비싼) 호출을 방지하기 위해, 해당 키에 대한 추가 요청을 차단하는 것이 바람직하다.

그래서, 키 - 레벨 잠금을 구현하는 가장 좋은 방법은 무엇입니까? 합니까 레디 스 박스의 출력을 지원합니까? 우리는 분산 잠금 처리하지 않는 경우겠습니까 ServiceStack의 IRedisClient.AcquireLock이 잘 맞는, 또는 그것은 과잉이다? 아니면 내가 여기에 설명처럼 잠금 자신, 뭔가를 구현하는 것이 가장 좋은 것입니까?

사전에 감사합니다!

해결법

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

    1.레디 스 내장 레디 스에 키가 될 때까지 클라이언트 연결을 차단하기 위해 아무 의미가없는, 비 블로킹 비동기 서버입니다.

    레디 스 내장 레디 스에 키가 될 때까지 클라이언트 연결을 차단하기 위해 아무 의미가없는, 비 블로킹 비동기 서버입니다.

    참고 : 레디 스 그러므로 어떤 잠금 당신은 레디 스를 포함하는 디자인으로 '분산'이다 구현, 원격없는 NoSQL 데이터 저장소입니다. ServiceStack의 AcquireLock 만 1 클라이언트 연결이 잠금을 가지고 있도록 레디 스의 원시 SETNX 잠금 의미를 사용하여 연결이 고정 될 때까지 차단 상태를 유지하고 있습니다 / 다른 모든 클라이언트는 지수 재시도 백 오프 승수 폴링을 사용하여 해제되었습니다.

    폴링없이 분산 잠금을 구현하기 위해 당신은 잠금이 해제 된 것을 기다리는 고객에게 통지 SETNX + 레디 스의 펍 / 하위 지원의 조합을 사용하는 솔루션을 만드는 데 필요한 것입니다.

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

    2.나는 글로벌 네트워크 뮤텍스로 레디 스를 사용하기위한 다음과 같은 패턴을 사용 :

    나는 글로벌 네트워크 뮤텍스로 레디 스를 사용하기위한 다음과 같은 패턴을 사용 :

  3. ==============================

    3.왜 당신이 잠금으로 원하는 키에 SETNX을 ​​발행하지? 키가 잠금 / 설정할 수있는 경우는 1을 반환합니다. 그리고 그것은 이미 존재 0 경우에 따라서 잠금이 수행 할 수 없습니다. 특정 정보에 대한 http://www.redis.io/commands/setnx를 참조하십시오.

    왜 당신이 잠금으로 원하는 키에 SETNX을 ​​발행하지? 키가 잠금 / 설정할 수있는 경우는 1을 반환합니다. 그리고 그것은 이미 존재 0 경우에 따라서 잠금이 수행 할 수 없습니다. 특정 정보에 대한 http://www.redis.io/commands/setnx를 참조하십시오.

  4. from https://stackoverflow.com/questions/14387802/block-access-to-redis-key-servicestack by cc-by-sa and MIT license