Redis
 sql >> Database >  >> NoSQL >> Redis

StackExchange.Redis.RedisTimeoutException:timeout in attesa di risposta

Come posso vedere dal tuo messaggio di eccezione, il numero minimo di processi di lavoro è troppo basso per il traffico che hai.

LAVORATORE:(Occupato=10, Libero=32757, Min=2, Max=32767)

Avevi 10 thread di lavoro occupati quando si è verificata questa eccezione, mentre avevi 2 thread di lavoro all'inizio.

Quando l'applicazione esaurisce i thread disponibili per completare un'operazione, .NET ne avvia uno nuovo (fino al valore massimo, ovviamente). E aspetta un po' per vedere se è necessario un thread di lavoro aggiuntivo. Se la tua applicazione ha ancora bisogno di thread di lavoro, .NET ne avvia un altro. Poi un altro, poi un altro... Ma questo richiede tempo. Non si verifica in 0 ms. Osservando il tuo messaggio di eccezione, possiamo vedere che .NET ha creato 8 thread di lavoro aggiuntivi (10 - 2 =8). Durante il processo di creazione, questa particolare operazione Redis è rimasta in attesa e alla fine è scaduta.

Potresti usare ThreadPool.SetMinThreads(Int32, Int32) metodo all'inizio dell'applicazione per impostare il numero minimo di thread. Ti suggerisco di iniziare con ThreadPool.SetMinThreads(10, 10) e modificalo mentre lo provi.

Lettura aggiuntiva:

https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool.setminthreadshttps://stackexchange.github.io/StackExchange.Redis/Timeouts.html