在 Redis 中具有事务的自动增量 ID(ServiceStack RedisClient)

本文关键字:ID ServiceStack RedisClient Redis 事务 | 更新日期: 2023-09-27 18:36:18

使用IncrementKey的ActionSuccess回调在事务中不起作用:

public class Article
{
    public long Id { get; set; }
    public string Name { get; set; }
}
[Test]
public void Can_create_article_with_autoincremental-id()
{
    Article a = new Article() { Name = "I Love Writing Test" };
    using (var trans = Redis.CreateTransaction())
    {
        trans.QueueCommand(r => r.IncrementValue("id:article"), id => a.Id = id);
        trans.QueueCommand(r => r.Store<Article>(a));
        trans.Commit();
    }
    Assert.That(Redis.Get<Article>("1").Id,Is.Equal("1"));
}

在 Redis 中具有事务的自动增量 ID(ServiceStack RedisClient)

Redis 事务都是同时执行的,回调只在整个事务完成后触发。因此,您不能在该事务的另一部分的同一事务中的回调中使用返回值。

如果您只想使用自动递增 Id 计数器存储文章,您只需执行以下操作:

var a = new Article { 
   Id = Redis.As<Article>().GetNextSequence(), 
   Name = "I Love Writing Test" 
};
Redis.Store(a);

不需要为此进行交易。要在事务中使用来自 Redis 的值,该事务仅在所有值均未更改时才执行,请使用 WATCH 命令。有关示例,请参阅我之前的答案。