我正在尝试掌握 ServiceStack Redis 示例和 Redis 本身,现在有一些问题。
问题一:
我看到定义了一些静态索引,例如:
static class TagIndex
{
public static string Questions(string tag) { return "urn:tags>q:" + tag.ToLower(); }
public static string All { get { return "urn:tags"; } }
}
“>”(大于)符号的作用是什么?这是某种约定吗?
问题二:
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 或只是一个额外的键?
问题三:
这与 Redis 更相关,但我试图弄清楚所有内容是如何存储在 Redis 中的,以便掌握示例,所以我做了:
在控制台中启动了 redis-cli.exe
键入 'keys *' 这会显示所有键
输入 'get id:User:DisplayName:joseph' 这显示 'urn:user:1'
键入 'get urn:user:1' 这会显示用户
现在,如果我执行“get urn:tags”,我还会看到像“urn:user>q:1”或“urn:tags”这样的键,我会收到错误消息“针对持有错误类型值的键进行错误操作” '.并尝试了其他 Redis 命令,如 smembers 但我找不到正确的查询命令。
最佳答案
问题 1:return "urn:tags>q:"+ tag.ToLower();
为您提供给定标签的键(字符串); “>”对 Redis 没有意义,它是示例开发人员的约定,可以是任何其他字符。
问题 3:使用 TYPE命令来确定键的类型,然后您将在 redis 文档中找到正确的命令来获取值。
关于redis - 理解 Redis ServiceStack 示例的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22508393/