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
相关产品推荐
相关产品推荐

