8
votes

I have a list of 200,000+ users in Redis cache.

When I try to fetch that list from Redis cache using StackExchange.Redis StringGet I get TimeOut error:

"Timeout performing GET , inst: 1, mgr: ExecuteSelect, err: never, queue: 2, qu: 0, qs: 2, qc: 0, wr: 0, wq: 0, in: 8596, ar: 0, IOCP: (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=0,Free=4095,Min=2,Max=4095), clientName: WIN-XYZ"

Can someone explain what does these values signifies: Busy, Free, Min and Max?

I have already increased the timeout to much larger extent via this in constructor:

redis = ConnectionMultiplexer.Connect(string.Format("{0},allowAdmin=true,connectTimeout=1500000,keepAlive=100", redisConfig));

But I am still getting the timeout every time I fetch the list of users.

This is not the problem with GET only I am getting issues while setting that list too:

Timeout performing PSETEX , inst: 1, mgr: ExecuteSelect, err: never, queue: 2, qu: 0, qs: 2, qc: 0, wr: 1, wq: 1, in: 0, ar: 0, IOCP: (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=0,Free=8191,Min=2,Max=8191), clientName: WIN-XYZ

at:

db.StringSet(cacheKey, bytes, slidingExpiration);

I even tried raising the various timeouts mentioned here https://stackexchange.github.io/StackExchange.Redis/Configuration:

                redis = ConnectionMultiplexer.Connect(string.Format("{0},allowAdmin=true,syncTimeout=600000,connectRetry=3,connectTimeout=600000,keepAlive=180", redisConfig));
                redis.PreserveAsyncOrder = false;

but I am still getting the following error:

Timeout performing GET , inst: 0, mgr: ExecuteSelect, err: never, queue: 0, qu: 0, qs: 0, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, IOCP: (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=2,Free=4093,Min=2,Max=4095), clientName: WIN-XYZ

1
in:8596 means there is data in the input. its hard to know why it is not processed.Ulug Toprak
try connection.PreserveAsyncOrder = false; it could be a dead lock issueUlug Toprak

1 Answers

0
votes

In my case I restarted the server and it worked, the problem is that the server CPU was 100% and when the user was trying to get the credentials from redis it was impossible to access, so... TIMEOUT and kick out from the session with a beautiful error message. Be careful of your processes, maybe one of them was killing the CPU, if that happens, I can sure, Redis will timeout.

My error message:

 Error Message: Timeout performing GET [email protected], inst: 1, mgr: 
 Inactive, err: never, queue: 5, qu: 0, qs: 5, qc: 0, wr: 0, wq: 0, in: 990, ar: 0, 
 clientName: RD0003FXXXXF5D, serverEndpoint: 
 Unspecified/cr.redis.cache.windows.net:6380, keyHashSlot: 14356, IOCP: 
 (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=10,Free=8181,Min=2,Max=8191) (Please take a look at this article for some common client-side issues that can cause 
 timeouts: http://stackexchange.github.io/StackExchange.Redis/Timeouts)