2014-03-19 3 views
1

ServiceStack Redis 예제와 Redis 자체에 대한 이해를 얻으 려하고 몇 가지 질문이 있습니다.Redis ServiceStack 이해 문제 예

질문 1 :

이 좀 정적 인덱스 정의를 참조 예 :

static class TagIndex 
{ 
    public static string Questions(string tag) { return "urn:tags>q:" + tag.ToLower(); } 
    public static string All { get { return "urn:tags"; } } 
} 

'>'(보다 큼) 기호가 무엇을 할 않습니다? 이건 일종의 컨벤션인가요?

질문 2 :

지금까지 내가 이해할 수
public User GetOrCreateUser(User user) 
{ 
    var userIdAliasKey = "id:User:DisplayName:" + user.DisplayName.ToLower(); 
    using (var redis = RedisManager.GetClient()) 
    { 
     var redisUsers = redis.As<User>(); 

     var userKey = redis.GetValue(userIdAliasKey); 
     if (userKey != null) return redisUsers.GetValue(userKey); 

     if (user.Id == default(long)) user.Id = redisUsers.GetNextSequence(); 

     redisUsers.Store(user); 
     redis.SetEntry(userIdAliasKey, user.CreateUrn()); 

     return redisUsers.GetById(user.Id); 
    } 
} 

, 먼저 사용자는 고유 ID와 함께 저장됩니다. 클라이언트를 사용할 때 필요합니까 (Redis가 필요하지 않음을 알고 있습니다). 내 모델에는 의미있는 문자열 ID (예 : 전자 메일 주소)가 있습니다. 또한 SetEntry가 완료된 것을 볼 수 있습니다. SetEntry는 정확히 무엇을합니까? id와 검색 가능한 키 사이의 관계를 설정하는 것이 추가 키라고 생각합니다. 의미있는 키를 사용하여 객체 자체를 저장할 때 필요하지는 않습니다. 따라서 user.id = "urn : someusername"입니다. SetEntry는 Redis Set 또는 여분의 키로 어떻게 저장됩니까?

질문 3 :

이 더 레디 스 관련이 있지만이 예에 입씨름을하기 위해 모든 레디 스에 저장하는 방법을 알아 내려고 노력하고 있어요 그래서 내가 그랬어 :

  • 시작 '요셉 : 사용자 : 표시 이름 ID를 얻을'콘솔에서 레디 스-cli.exe는

  • 형식화 된 '키 *'이 모든 키를

  • 형식화를 보여줍니다 '사용자> Q : 항아리 1'이 나는 또한 같은 키를 참조 이제 사용자

를 보여줍니다 '1 얻을 항아리 : 사용자'또는 ': 사용자 1 항아리'

  • 형식화을이 보여 'urn : tags'를 수행하면 'urn : tags'를 얻는 데 '잘못된 종류의 값을 보유한 키에 대한 ERR 연산'오류가 발생합니다. 그리고 다른 Redis 명령어를 사용해 보았지만 올바른 쿼리 명령어를 찾을 수 없습니다.

  • 답변

    3

    질문 1 : return "urn:tags>q:" + tag.ToLower();은 특정 태그에 대한 키 (문자열)를 제공합니다. ">"는 Redis에는 아무런 의미가 없으며 예제의 개발자의 관습이며 다른 문자 일 수 있습니다.

    질문 3 : TYPE 명령을 사용하여 키 유형을 결정한 다음 redis 설명서에서 올바른 명령을 찾아 값을 가져옵니다.

    +1

    감사합니다. TYPE 힌트를 사용하면 예를 들어 'type urn : tags'가 zset임을 확인할 수 있습니다. 그리고 'zrange urn : tags 0 -1'이 범위를 보여줬다. – Stackbever