c# ServiceStack Redis Clients grown up suddenly and get max number of clients reached

182 Views Asked by At

im using redis with servicestack.

i get client with this code :

        public RedisClient GetClient()
        {
            RedisManagerPool redisManager = new RedisManagerPool();
            RedisClient client = (RedisClient)redisManager.GetClient();
            client.Db = AppConst.RedisServer;
            return client;
        }

everything go fine but suddenly my clients grown up and i get some errors and look like redis-server proccess down, make me restart server :

max number of clients reached

Could not resolve master instance within 10000ms RetryTimeout

and i set maxclient more value but still get this error but max number of.... replaced with localhost:6379

stacktrace :

at ServiceStack.Redis.RedisResolver.CreateRedisClient(RedisEndpoint config, Boolean master) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Redis/src/ServiceStack.Redis/RedisResolver.cs:line 110 at ServiceStack.Redis.RedisManagerPool.GetClient(Boolean forAsync) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Redis/src/ServiceStack.Redis/RedisManagerPool.cs:line 222

at ServiceStack.Redis.RedisNativeClient.AssertConnectedSocket() in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Redis/src/ServiceStack.Redis/RedisNativeClient_Utils.cs:line 292 at ServiceStack.Redis.RedisNativeClient.AssertServerVersionNumber() in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Redis/src/ServiceStack.Redis/RedisNativeClient_Utils.cs:line 56 at ServiceStack.Redis.RedisClient.GetServerRole() in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Redis/src/ServiceStack.Redis/RedisClient.cs:line 1119 at ServiceStack.Redis.RedisResolver.GetValidMaster(RedisClient client, RedisEndpoint config) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Redis/src/ServiceStack.Redis/RedisResolver.cs:line 118 at ServiceStack.Redis.RedisResolver.CreateRedisClient(RedisEndpoint config, Boolean master) in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Redis/src/ServiceStack.Redis/RedisResolver.cs:line 96

i search many times and i try some ways like set maxclients or maxpoolsize even UseIpRateLimiting and... but dont work.

1

There are 1 best solutions below

6
mythz On

You're using RedisManagerPool incorrectly, all Redis Client Managers need to either be registered as a singleton or maintained in a static variable so all client instances are resolved from the same Pool.

If you're not using an IOC, maintain a static instance of RedisManagerPool, e.g:

static RedisManagerPool redisManager = new RedisManagerPool();

public RedisClient GetClient()
{
    RedisClient client = (RedisClient)redisManager.GetClient();
    client.Db = AppConst.RedisServer;
    return client;
}