2014-03-19 36 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:

這更Redis的關係,但我試圖找出一切是如何存儲在Redis的,以獲得在該示例一握,所以我做:

  • 入門Redis的-cli.exe在控制檯

  • 類型化 '鍵*' 這顯示了所有鍵

  • 類型化 '獲得編號:用戶:顯示名稱:約瑟夫'這表明「金塔:用戶:1」

  • 類型化「得到甕:用戶:1」這說明用戶

現在我也看到了鍵,如「甕:用戶>問:1」或'urn:tags'如果我做一個'get urn:tags'我得到錯誤'ERR操作對一個持有錯誤類型值的鍵'。並嘗試其他Redis命令,如smembers,但我找不到正確的查詢命令。

回答

3

問題1:return "urn:tags>q:" + tag.ToLower();給你一個給定標籤的鍵(一個字符串); 「>」對Redis沒有任何意義,它是該示例開發人員的約定,可能是其他任何角色。

問題3:使用TYPE命令確定鍵的類型,然後在redis文檔中找到正確的命令來獲取值。

+1

非常感謝!用你的TYPE提示,例如'type urn:tags'可以確定它是一個zset。 'zrange urn:tags 0 -1'顯示了範圍。 – Stackbever