복붙노트

[REDIS] 파이프 라인 배수로 ServiceStack를 사용하여 레디 스에 명령을 읽는 방법

REDIS

파이프 라인 배수로 ServiceStack를 사용하여 레디 스에 명령을 읽는 방법

ServiceStack를 사용합니다 (ContainsKey 명령을 특히) 다중 읽기 명령을 수행하는 방법은 무엇입니까?

우리가 캐시에없는 경우에만 사람을 얻기 위해 찾고, 그래서 저장된 객체는 데이터베이스에서 가져 오는 데 시간이 걸릴.

나는 다시 널 (null)을 오면 내가 데이터베이스에서 가져 오기 다음 개체에 대한 레디 스를 요청하고 수 있다는 것을 알고,하지만 난 bools이 백업의이 아니라 단지 목록을 한 후 결정하는 것 때문에 저장되는 개체는 상당히 큰있는 식별자에 대한 질의 그에서 데이터베이스한다.

시간 나는 ID의 내 목록을 반복하고있어 당분간과 servicestack에서 ContainsKey 방법을 사용하여 (최대 100 정도가 될 수 있습니다). 나는 앞으로 뒷면의 모든과를 방지하고 한 번에 모든 요청을 만들기 위해 찾고 있어요.

해결법

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

    1.ServiceStack.Redis 클라이언트에서 단일 호출에 여러 값을 (MGET 사용) 페치는 GetValues ​​또는 GetValuesMap을 (문자열과 T API를 모두 사용할 수 있습니다)를 사용할 수 있습니다. 만 기존 항목은 사용자가 ID를 귀하의 모델 또는 기존 키와 값의 사전을 반환 GetValuesMap이있는 경우는 GetValues으로 감지 할 수있는, 반환됩니다.

    ServiceStack.Redis 클라이언트에서 단일 호출에 여러 값을 (MGET 사용) 페치는 GetValues ​​또는 GetValuesMap을 (문자열과 T API를 모두 사용할 수 있습니다)를 사용할 수 있습니다. 만 기존 항목은 사용자가 ID를 귀하의 모델 또는 기존 키와 값의 사전을 반환 GetValuesMap이있는 경우는 GetValues으로 감지 할 수있는, 반환됩니다.

    이에서, 당신은 결정하고 데이터베이스에서 모든 누락 된 ID를 가져올 수 있습니다. 그냥 어쨌든 레디 스에서 기존 값을 가져 오기 위하여려고하는 경우에, 이것은 당신이 모든 값을 취득 해 1 호출로 기존의 키를 결정할 수 있기 때문에 최적의 전략이다.

    어떤 이유로 당신이 정말로 단지를 가져 오는없이 레디 스에서 키의 존재를 확인하고 싶은 경우에, 당신은 트랜잭션을 사용할 수 있습니다 / 또는 파이프 라인 (모두 파이프 라인입니다) 1 개 소켓 쓰기에 레디 스에 전송됩니다 여러 작업을 대기열에. 여기 RedisStackOverflow에서이 예는 전송을 얻고 하나의 일괄 처리에서 실행 30 개 작업까지 그 큐 데모입니다.

    당신은 레디 스이있는 경우> 만들고 레디 스의 서버 측 LUA 지원을 사용하여 합성 작업을 실행할 수 있습니다 v2.5x. 당신은 서버 측 LUA 스크립트를 실행하는 ServiceStack.Redis 클라이언트에서 IRedisClient에서 이러한 API를 사용할 수 있습니다 :

    string GetEvalStr(string body, int numOfArgs, params string[] args);
    int GetEvalInt(string body, int numOfArgs, params string[] args);
    List<string> GetEvalMultiData(string body, int numOfArgs, params string[] args);
    
  2. from https://stackoverflow.com/questions/10933232/how-to-pipeline-multiple-read-commands-to-redis-using-servicestack by cc-by-sa and MIT license