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 に答える