Redis
 sql >> Datenbank >  >> NoSQL >> Redis

StackExchange.Redis.RedisTimeoutException:Zeitüberschreitung beim Warten auf eine Antwort

Wie ich aus Ihrer Ausnahmemeldung ersehen kann, ist die Mindestanzahl Ihrer Worker-Prozesse für den vorhandenen Datenverkehr zu niedrig.

ARBEITNEHMER:(Beschäftigt=10,Frei=32757,Min=2,Max=32767)

Sie hatten 10 ausgelastete Worker-Threads, als diese Ausnahme auftrat, während Sie 2 Worker-Threads für den Start hatten.

Wenn Ihrer Anwendung die verfügbaren Threads zum Abschließen eines Vorgangs ausgehen, startet .NET einen neuen (natürlich bis zum Maximalwert). Und wartet ein bisschen, um zu sehen, ob ein zusätzlicher Worker-Thread benötigt wird. Wenn Ihre Anwendung noch Worker-Threads benötigt, startet .NET einen anderen. Dann noch eine, dann noch eine ... Aber das braucht Zeit. Es tritt nicht in 0 ms auf. Wenn wir uns Ihre Ausnahmemeldung ansehen, können wir sehen, dass .NET 8 zusätzliche Worker-Threads erstellt hat (10 - 2 =8). Während des Erstellungsprozesses hat dieser spezielle Redis-Vorgang gewartet und ist schließlich abgelaufen.

Sie könnten ThreadPool.SetMinThreads(Int32, Int32) verwenden -Methode am Anfang Ihrer Anwendung, um die minimale Anzahl von Threads festzulegen. Ich schlage vor, dass Sie mit ThreadPool.SetMinThreads(10, 10) beginnen und optimieren Sie es, während Sie es testen.

Zusätzliche Lektüre:

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