2

我正在尝试使用 C# ServiceStack 将多个新实体插入 Redis。我遇到的问题是生成序列号。

从我读过的内容来看,您在排队事务命令以保证原子操作时无法发出其他请求。

这意味着必须迭代我的实体集合以首先生成序列号,然后再次迭代以将事务命令排队并执行?

有没有一种有效的方法来做到这一点?

IRedisClientsManager RedisManager;

RedisManager.ExecTrans(x =>
{
    foreach (var entity in entities)
    {
        x.QueueCommand(c =>
        {
            //entity.Id = generate sequence number
            c.Store(entity);
        });
    }
    x.Commit();
});
4

1 回答 1

1

您可以预先获取一批序列 ID,然后将它们分配给您的模型。您还可以使用StoreAll()which 利用 Redis 的批处理MSET操作,以便所有模型都在同一操作中执行/存储。

鉴于此,我会用类似的东西重写上面的内容:

RedisManager.ExecAs<TEntity>(r => {
   var maxSeqId = r.GetNextSequence(entities.Count);
   var newId = maxSeqId - entities.Count;
   entities.ForEach(x => x.Id = newId++);
   r.StoreAll(entities);
});
于 2012-07-15T17:57:14.390 回答