/ / Cómo crear múltiples números de secuencia cuando se utiliza una transacción con Redis ServiceStack - c #, redis, servicestack

Cómo crear múltiples números de secuencia cuando se utiliza una transacción con Redis ServiceStack - c #, redis, servicestack

Estoy tratando de insertar varias entidades nuevas en Redis usando C # ServiceStack. El problema que tengo es generar los números de secuencia.

Por lo que he leído, no puede realizar otras solicitudes mientras se ponen en cola los comandos de transacción para garauntee una acción atómica.

¿Esto significaría entonces tener que iterar sobre mi colección de entidades para generar primero los números de secuencia y luego iterar nuevamente para poner en cola los comandos de transacción y ejecutar?

¿Hay una manera eficiente de hacer esto?

IRedisClientsManager RedisManager;

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

Respuestas

1 para la respuesta № 1

Puede pre-buscar un lote de identificadores de secuencia y luego asignarlos a sus modelos. También puedes usar StoreAll() que aprovecha el lote de redis MSET Operación para que todos los modelos se ejecuten / almacenen en la misma operación.

Dado esto, volvería a escribir lo anterior con algo como:

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