/ / Jak utworzyć wiele numerów sekwencji podczas korzystania z transakcji z Redis ServiceStack - c #, redis, servicestack

Jak utworzyć wiele numerów sekwencji podczas korzystania z transakcji z Redis ServiceStack - c #, redis, servicestack

Próbuję wstawić wiele nowych encji do Redis przy użyciu C # ServiceStack. Mam problem z generowaniem numerów sekwencyjnych.

Z tego, co przeczytałem, nie można wysyłać innych żądań w kolejce poleceń transakcji, aby uzyskać akcję atomową.

Oznaczałoby to wtedy konieczność iteracji po kolekcji moich bytów, aby najpierw wygenerować numery sekwencyjne, a następnie powtórzyć iterację w celu kolejkowania poleceń transakcji i wykonania?

Czy istnieje skuteczny sposób na zrobienie tego?

IRedisClientsManager RedisManager;

RedisManager.ExecTrans(x =>
{
foreach (var entity in entities)
{
x.QueueCommand(c =>
{
//entity.Id = generate sequence number
c.Store(entity);
});
}
x.Commit();
});

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz pobrać partię identyfikatorów sekwencji, a następnie przypisać je do swoich modeli. Możesz także użyć StoreAll() która korzysta z partii Redisa MSET operacji, aby wszystkie modele zostały wykonane / zapisane w tej samej operacji.

Biorąc to pod uwagę, chciałbym ponownie napisać powyższe, używając czegoś takiego:

RedisManager.ExecAs<TEntity>(r => {
var maxSeqId = r.GetNextSequence(entities.Count);
var newId = maxSeqId - entities.Count;
entities.ForEach(x => x.Id = newId++);
r.StoreAll(entities);
});