İLERİ
Pipeline & Batch
Birden fazla komutu tek roundtrip'te gönder. Latency dramatik düşer.
Kod örneği görünümü
Bu sayfadaki eşleşen örnekleri seçilen istemciye göre gösterir.
# redis-cli pipe mode
echo -e "SET a 1\nSET b 2\nSET c 3\nGET a\nGET b\nGET c" | redis-cli --pipe
# Normal: 6 komut = 6 roundtrip
# Pipeline: 6 komut = 1 roundtrip
public class BatchService
{
private readonly IDatabase _redis;
public BatchService(IConnectionMultiplexer mux)
=> _redis = mux.GetDatabase();
// Batch (fire-and-forget + await sonuçları)
public async Task<Dictionary<string, string?>> BatchGetAsync(IEnumerable<string> keys)
{
var batch = _redis.CreateBatch();
var tasks = keys.ToDictionary(
k => k,
k => batch.StringGetAsync(k));
batch.Execute();
var results = new Dictionary<string, string?>();
foreach (var (key, task) in tasks)
{
var value = await task;
results[key] = value.HasValue ? value.ToString() : null;
}
return results;
}
// Pipeline ile bulk write
public async Task BulkSetAsync(Dictionary<string, string> data, TimeSpan ttl)
{
var batch = _redis.CreateBatch();
var tasks = new List<Task>();
foreach (var (key, value) in data)
{
tasks.Add(batch.StringSetAsync(key, value, ttl));
}
batch.Execute();
await Task.WhenAll(tasks);
}
// FireAndForget (sonucu beklemeden)
public void IncrementNoWait(string key)
{
_redis.StringIncrement(key, flags: CommandFlags.FireAndForget);
}
}
StackExchange.Redis zaten multiplexed. Ayrı thread'lerden gelen komutlar otomatik pipeline'lanır.
CreateBatchexplicit kontrol istersen kullan — genellikle gerek yok.