1

我已经搜索了文档,但没有找到放入 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 数据库。这是预期的吗?

4

1 回答 1

1

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

INCR seq:BucketInfo

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

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

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

于 2019-03-31T21:29:49.073 回答