c# ServiceStack Redis客户端突然增长并达到最大客户端数量

ccrfmcuu  于 2023-02-07  发布在  Redis
关注(0)|答案(1)|浏览(317)

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.

q7solyqu

q7solyqu1#

您错误地使用了RedisManagerPool,所有的Redis客户端管理器都需要注册为一个单独的示例或者维护在一个静态变量中,这样所有的客户端示例都可以从同一个池中解析。
如果您没有使用IOC,请维护RedisManagerPool的静态示例,例如:

static RedisManagerPool redisManager = new RedisManagerPool();

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

相关问题