1

带有 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"));
}
4

1 回答 1

0

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

如果您只想存储带有自动递增 Id 计数器的文章,您可以简单地执行以下操作:

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

没有必要为此进行交易。要在事务中使用 Redis 中的值,该事务仅在没有值更改时才会执行,请使用WATCH命令。有关示例,请参见我之前的答案。

于 2012-06-06T08:12:13.850 回答