altro test con redis transaction unica
This commit is contained in:
@@ -4828,11 +4828,32 @@ namespace MP.IOC.Data
|
||||
// ...e salvo...
|
||||
await RedisSetHashDictAsync(redKey, result, numSecCache);
|
||||
#endif
|
||||
// Creiamo i task senza attenderli immediatamente
|
||||
var delTask = RedisDelKeyAsync(redKey);
|
||||
var setTask = RedisSetHashDictAsync(redKey, result, numSecCache);
|
||||
// Attendiamo entrambi i task contemporaneamente (1 solo RTT percepito)
|
||||
await Task.WhenAll(delTask, setTask);
|
||||
|
||||
bool useTrans = true;
|
||||
|
||||
if (useTrans)
|
||||
{
|
||||
// variazione con redis transaction...
|
||||
var transaction = redisDb.CreateTransaction();
|
||||
// 1. Eliminiamo la chiave (rimuove i vecchi campi)
|
||||
_ = transaction.KeyDeleteAsync(redKey);
|
||||
// 2. Prepariamo gli HashEntry per il batch (più efficiente di un Dictionary)
|
||||
HashEntry[] entries = result.Select(kvp => new HashEntry(kvp.Key, kvp.Value)).ToArray();
|
||||
// 3. Inseriamo i nuovi valori
|
||||
_ = transaction.HashSetAsync(redKey, entries);
|
||||
// 4. Impostiamo l'expiration in un unico colpo
|
||||
_ = transaction.KeyExpireAsync(redKey, TimeSpan.FromSeconds(numSecCache));
|
||||
// Eseguiamo tutto in un unico viaggio verso Redis
|
||||
bool success = await transaction.ExecuteAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Creiamo i task senza attenderli immediatamente
|
||||
var delTask = RedisDelKeyAsync(redKey);
|
||||
var setTask = RedisSetHashDictAsync(redKey, result, numSecCache);
|
||||
// Attendiamo entrambi i task contemporaneamente (1 solo RTT percepito)
|
||||
await Task.WhenAll(delTask, setTask);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user