在 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 计数器存储文章,您只需执行以下操作:
var a = new Article {
Id = Redis.As<Article>().GetNextSequence(),
Name = "I Love Writing Test"
};
Redis.Store(a);
不需要为此进行交易。要在事务中使用来自 Redis 的值,该事务仅在所有值均未更改时才执行,请使用 WATCH 命令。有关示例,请参阅我之前的答案。