You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RedisPoolManager中RedisConfig的DefaultPoolSizeMultiplier属性用法及连接池方案咨询

ServiceStack.Redis配置属性与连接池方案咨询

我在使用ServiceStack.Redis时,发现RedisConfig的DefaultPoolSizeMultiplier与DefaultMaxPoolSize属性缺乏详细文档。我推测DefaultMaxPoolSize用于限制RedisPoolManager可拥有的RedisClient数量,但不清楚DefaultPoolSizeMultiplier的具体用途。

相关代码注释

// Default Max Pool Size for Pooled Redis Client Managers (default none)
public static int? DefaultMaxPoolSize;

// The default pool size multiplier if no pool size is specified (default 50)
public static int DefaultPoolSizeMultiplier = 50;

我实现的RedisClientManager代码

public class RedisClientManager
{
    private readonly List<RedisManagerPool> pooledClientmanagers = new List<RedisManagerPool>();
    private const int clientPoolSize = 50;
    public RedisClientManager()
    {
        RedisConfig.DefaultRetryTimeout = 5000;
        RedisConfig.BackOffMultiplier = 2;
        RedisConfig.DefaultIdleTimeOutSecs = 600;
        RedisConfig.DefaultMaxPoolSize = clientPoolSize;
        try
        {
            for (int i = 0; i < 20; ++i)
            {
                var redisManagerPool = new RedisManagerPool
                    (RedisConnectionString);
                this.pooledClientmanagers.Add(redisManagerPool);

            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    public IRedisClient GetRedisClient()
    {
        IRedisClient client = null;
        foreach (var poolManager in pooledClientmanagers)
        {
            if ((poolManager.GetClientPoolActiveStates().Where(x => x == 0).Any()) ||
                (poolManager.GetStats().ContainsKey("clientsInUse") && Convert.ToInt32(poolManager.GetStats().GetValueOrDefault("clientsInUse")) < clientPoolSize))
            {
                client = poolManager.GetClient();
                var clientName = $"{AppDomain.CurrentDomain.FriendlyName}_{poolManager.GetId()}_{AppDomain.GetCurrentThreadId()}";
                client.SetClient(clientName);
                break;
            }
        }
        return client;
    }
}

方案选择咨询

现在我需要始终维持1000个活跃RedisClient,想咨询以下哪种方案更推荐?

  • 方案1:注册单例RedisPoolManager并设置DefaultMaxPoolSize为1000(请问该属性是否有上限?)
  • 方案2:使用包含20个RedisManagerPool的静态列表,每个设置DefaultMaxPoolSize为50

恳请@mythz提供专业见解。

内容的提问来源于stack exchange,提问作者Vinay SPal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:13:16