使用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"));
}
答案 0 :(得分:0)
Redis事务全部在回调仅在整个事务完成后触发的同时执行。因此,您不能在该事务的另一部分中的同一事务中的回调中使用返回值。
如果您只想存储带有自动增量Id计数器的文章,您可以这样做:
var a = new Article {
Id = Redis.As<Article>().GetNextSequence(),
Name = "I Love Writing Test"
};
Redis.Store(a);
这不需要交易。要在事务中使用Redis中的值,只有在没有更改任何值时才执行该事务,请使用WATCH命令。请参阅我之前的回答for an example。