public override IRedisSocket GetRedisSocket(CommandPacket cmd) { if (cmd != null && (_rw_splitting || !_is_single)) { var cmdset = CommandSets.Get(cmd._command); if (cmdset != null) { if (!_is_single && (cmdset.Status & CommandSets.LocalStatus.check_single) == CommandSets.LocalStatus.check_single) { throw new RedisServerException($"RedisClient: Method cannot be used in {UseType} mode. You can set \"max pool size=1\", but it is not singleton mode."); } if (_rw_splitting && ((cmdset.Tag & CommandSets.ServerTag.read) == CommandSets.ServerTag.read || (cmdset.Flag & CommandSets.ServerFlag.@readonly) == CommandSets.ServerFlag.@readonly)) { var rndkeys = _ib.GetKeys(v => v == null || v.IsAvailable && v._policy._connectionStringBuilder.Host != _masterHost); if (rndkeys.Any()) { var rndkey = rndkeys[_rnd.Value.Next(0, rndkeys.Length)]; var rndpool = _ib.Get(rndkey); var rndcli = rndpool.Get(); var rndrds = rndcli.Value.Adapter.GetRedisSocket(null); var rndrdsproxy = DefaultRedisSocket.CreateTempProxy(rndrds, () => rndpool.Return(rndcli)); rndrdsproxy._pool = rndpool; return(rndrdsproxy); } } } } var poolkey = _masterHost; if (string.IsNullOrWhiteSpace(poolkey)) { throw new RedisClientException($"【{_connectionString.Host}】Redis Sentinel is switching"); } var pool = _ib.Get(poolkey); var cli = pool.Get(); var rds = cli.Value.Adapter.GetRedisSocket(null); var rdsproxy = DefaultRedisSocket.CreateTempProxy(rds, () => pool.Return(cli)); rdsproxy._pool = pool; return(rdsproxy); }
internal bool IsReadOnlyCommand() { var cmdset = CommandSets.Get(_command); return(cmdset != null && ((cmdset.Tag & CommandSets.ServerTag.read) == CommandSets.ServerTag.read || (cmdset.Flag & CommandSets.ServerFlag.@readonly) == CommandSets.ServerFlag.@readonly)); }