Bazen Redis'e bağlantı açmak için çok uzun zaman alıyor. İplik sayısının ve belki de PC konfigürasyonunun bağlanmasına bağlı gibi görünüyor. 4 çekirdekli CPU'lu iki iş istasyonunda 50 iş parçacığı için test çalıştırıyorum ve bağlantıyı açmak için 70-100 ms sürüyor ve 8 çekirdekli iş istasyonu ve 8 çekirdekli evreleme sunucusunda 1000-1500ms ve bazen çok daha fazlası vardı. Garip bağımlılık, ama 'yeniden üretilebilir. IIS uygulama havuzu yeniden başlatıldığında ve tüm iş parçacıkları yeniden bağlanmaya çalışırken, önbellek kesintisi gibi bir soruna neden olur. Makul bağlantı süresi almak için neyi değiştirmek zorundayım?Açma redis bağlantısı çok yavaş
Burada BookSleeve istemcisi kullanmak ve kodu bir örnektir:
static void Main(string[] args)
{
for (var i = 0; i < threadCount; i++)
threads.Add(new Thread(RunThread));
foreach (var thread in threads)
thread.Start();
foreach (var thread in threads)
thread.Join();
}
static void RunThread()
{
var connection = TryGetConnection();
while (connection == null)
{
connection = TryGetConnection();
}
}
static RedisConnection TryGetConnection()
{
var connection = currentConnection;
if ((connection != null) && (connection.State == RedisConnectionBase.ConnectionState.Open))
return connection;
lock (syncRoot)
{
if ((currentConnection != null) && (currentConnection.State == RedisConnectionBase.ConnectionState.Open))
return currentConnection;
if ((connectionTask != null) && connectionTask.IsCompleted)
connectionTask = null;
if (connectionTask == null)
{
if ((currentConnection != null) && (currentConnection.State == RedisConnectionBase.ConnectionState.Closed))
{
currentConnection.Dispose();
currentConnection = null;
}
if (currentConnection == null)
{
currentConnection = new RedisConnection(
serverAddress,
serverPort,
ioTimeout: (int) operationTimeout.TotalMilliseconds,
syncTimeout: (int) operationTimeout.TotalMilliseconds);
}
if (currentConnection.State == RedisConnectionBase.ConnectionState.New)
currentConnection.Open();
}
}
return null;
}
:) Düzenlediklerim için orijinal yazı – MihaKuz
Kullanım kılavuzunuz nedir? Bu önemlidir, çünkü IO tabakası sürümler arasında oldukça değişmiştir. –
1.3.37, NuGet'in en son sürümü olan NuGet – MihaKuz