【问题标题】:What does ServiceStack.Redis GetNextSequence call put into the redis database?ServiceStack.Redis GetNextSequence 调用将什么放入 redis 数据库?
【发布时间】:2015-04-26 18:14:36
【问题描述】:

我已经搜索了文档,但没有找到放入 redis 数据库(如果有的话)来跟踪 IRedisTypedClient 的“GetNextSequence”的内容。这是因为我开始看到我自己的钥匙以外的其他钥匙。我不确定我是否做错了什么来获取这些额外的密钥,或者它是否是 ServiceStack 跟踪某些值的方式。如果是,我想知道它何时执行此操作,以便我知道显示的所有“面包屑”是什么。

这是我的简化示例:

private IRedisTypedClient<BucketInfo> redisBucket;
redisBucket = Redis.As<BucketInfo>();
var newBucketInfo = new BucketInfo {
    DB = redisBucket.GetNextSequence (),
    policy = bucketPolicy,
};

当它执行 GetNextSequence 时,它​​会在我自己进行任何存储之前将 seq:BucketInfo 放入 redis 数据库。这和预期的一样吗?

【问题讨论】:

  • 我刚刚意识到我可能无法在字符串类型对象上“GetNextSequence”,所以这个操作只对 List 类型对象有意义。我将对此进行测试并发布结果。
  • 我想我是在和自己对话,但无论如何 GetNextSequence 不限于 List 对象。它确实将值放入 Redis 数据库以跟踪 GetNextSequence。 mythz 对另一个答案的评论支持这个想法:“ID 总是顺序的。他们使用 Redis 的 INCR 命令”
  • 这里有一个悬而未决的问题,即ServiceStack.Redis 放入redis 数据库中的不是直接用户键的文档在哪里?如果我知道要寻找什么,除了我想是源代码之外,我还没有在任何地方找到它。我的 Redis DB 中出现了一些非常令人困惑的东西,比如 id 集。有多少个 id 以及在什么条件下会显示这些 id?如果我不知道为什么或何时显示,我可以用 id 填充数据库?

标签: c# redis servicestack servicestack.redis


【解决方案1】:

IRedisTypedClient&lt;T&gt;.GetNextSequence() 是一个非常简单的操作——它只是增加一个存储在 SequenceKey 键中的值(默认情况下它被命名为"seq:TypeName")。所以在你的情况下,这个操作被翻译成

INCR seq:BucketInfo

这里是implementation,但您也可以使用 Redis MONITOR 命令轻松检查幕后发生的事情。它会将 Redis 服务器处理的所有命令流回 Redis 客户端。

请注意,如果您不调用GetNextSequence(),此值不会增加。 IE。如果您存储的实体 ID 不是从 GetNextSequence() 收到的,那么 ID 将添加到实体 ID 集中,并且实体将被存储,但这不会影响下一个生成的 ID。 反之亦然 - 您可以调用 GetNextSequence() 而无需将返回值分配给您存储的实体。这只会增加下一个 id。

因此,如果您看到一些额外的键,那么很可能您存储了一些实体而没有分配由 Redis 生成的顺序 ID。

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 2020-01-13
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2013-03-02
    • 2012-05-29
    相关资源
    最近更新 更多