在使用Redis ServiceStack的事务时如何创建多个序列号

时间:2012-07-15 08:28:48

标签: c# redis servicestack

我正在尝试使用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();
});

1 个答案:

答案 0 :(得分:1)

您可以预先获取一批序列ID,然后将它们分配给您的模型。您还可以使用StoreAll()利用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);
});