İLERİ
Cluster Mode
16384 hash slot → node'lara dağıtılır. Horizontal scaling. Her node bir kısım slot'tan sorumlu.
Kod örneği görünümü
Bu sayfadaki eşleşen örnekleri seçilen istemciye göre gösterir.
# 6 node cluster (3 master + 3 replica)
redis-cli --cluster create \
redis-1:6379 redis-2:6379 redis-3:6379 \
redis-4:6379 redis-5:6379 redis-6:6379 \
--cluster-replicas 1
# Cluster durumu
redis-cli CLUSTER INFO
redis-cli CLUSTER NODES
redis-cli CLUSTER SLOTS
# Key hangi slot'ta?
redis-cli CLUSTER KEYSLOT "user:1001"
# Hash tag — aynı slot'a düşür
SET {user:1001}:profile "..."
SET {user:1001}:settings "..."
# {user:1001} kısmı slot hesaplanır → multi-key ops mümkün
// Cluster bağlantısı
var config = new ConfigurationOptions
{
AbortOnConnectFail = false,
ConnectRetry = 5,
ConnectTimeout = 10000,
Password = "clusterpass"
};
// Tüm node'ları ekle (discovery otomatik çalışır ama seed gerekli)
config.EndPoints.Add("redis-1:6379");
config.EndPoints.Add("redis-2:6379");
config.EndPoints.Add("redis-3:6379");
builder.Services.AddSingleton<IConnectionMultiplexer>(
ConnectionMultiplexer.Connect(config));
// Hash tag ile multi-key operasyonlar
public class UserClusterService
{
private readonly IDatabase _redis;
public UserClusterService(IConnectionMultiplexer mux)
=> _redis = mux.GetDatabase();
// Hash tag: {user:1001} → aynı slot
public async Task SetUserDataAsync(int userId, UserProfile profile, UserSettings settings)
{
var batch = _redis.CreateBatch();
// Aynı hash tag → aynı slot → transaction mümkün
_ = batch.StringSetAsync($"{{user:{userId}}}:profile",
JsonSerializer.Serialize(profile), TimeSpan.FromHours(1));
_ = batch.StringSetAsync($"{{user:{userId}}}:settings",
JsonSerializer.Serialize(settings), TimeSpan.FromHours(1));
batch.Execute();
}
// Multi-key SCAN (cluster'da her node'a gider)
public async Task<List<string>> ScanKeysAsync(string pattern, int count = 100)
{
var server = _redis.Multiplexer.GetServers();
var keys = new List<string>();
foreach (var srv in server)
{
await foreach (var key in srv.KeysAsync(pattern: pattern, pageSize: count))
{
keys.Add(key.ToString());
}
}
return keys;
}
}
Cluster'da KEYS, SCAN, FLUSHALL tüm node'lara gider.
MGET/MSETfarklı slot'lardaki key'lere çalışmaz → hash tag kullan:{user:1001}:field.
Cluster + SELECT: Redis Cluster'da sadece db0 kullanılabilir.
SELECT 1komutuERR SELECT is not allowed in cluster modehatası verir. Mevcut multi-DB kullanan uygulamayı Cluster'a taşıyorsan tüm DB ayrımını key prefix'e çevirmelisin.