了解Redis ServiceStack示例的问题

时间:2014-03-19 14:05:20

标签: redis servicestack

我试图抓住ServiceStack Redis示例和Redis本身,现在有一些问题。

问题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 =&#34; urn:someusername&#34;。如何将SetEntry存储为Redis Set或只是一个额外的密钥?

问题3:

这与Redis有关,但我试图找出Redis中的所有内容是如何存储的,以便掌握示例,所以我做了:

  • 在控制台中启动redis-cli.exe

  • 键入&#39;键*&#39;这显示了所有键

  • 输入&#39;获取ID:用户:DisplayName:joseph&#39;这显示了&#39; urn:user:1&#39;

  • 键入&#39; get urn:user:1&#39;这显示了用户

现在我也看到像&#39; urn:user&gt; q:1&#39;或者&#39; urn:tags&#39;如果我做了一个&#39;得到urn:标签&#39;我得到错误&#39; ERR操作对一个持有错误类型值的密钥&#39;。并尝试了其他Redis命令,如smembers但我找不到正确的查询命令。

1 个答案:

答案 0 :(得分:3)

问题1:return "urn:tags>q:" + tag.ToLower();为您提供给定标签的密钥(字符串); &#34;&gt;&#34;对Redis没有任何意义,它是该示例开发人员的惯例,可能是任何其他角色。

问题3:使用TYPE命令确定密钥的类型,然后您将在redis文档中找到正确的命令来获取值。