コード例 #1
0
ファイル: RedisHelper.cs プロジェクト: wangscript007/fireasy2
 internal static void ParseHosts(RedisConfigurationSetting setting, string host)
 {
     if (!string.IsNullOrEmpty(host))
     {
         host.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ForEach(s => setting.Hosts.Add(new RedisHost(s)));
     }
 }
コード例 #2
0
ファイル: RedisLocker.cs プロジェクト: wangscript007/fireasy2
        /// <summary>
        /// 初始化 <see cref="RedisLocker"/> 类的新实例。
        /// </summary>
        /// <param name="options"></param>
        public RedisLocker(IServiceProvider serviceProvider, IOptionsMonitor <RedisDistributedLockerOptions> options)
            : this(serviceProvider)
        {
            RedisConfigurationSetting setting = null;
            var optValue = options.CurrentValue;
            if (!optValue.IsConfigured())
            {
                var section      = ConfigurationUnity.GetSection <LockerConfigurationSection>();
                var matchSetting = section.Settings.FirstOrDefault(s => s.Value.LockerType == typeof(RedisLocker)).Value;
                if (matchSetting != null && section.GetSetting(matchSetting.Name) is ExtendConfigurationSetting extSetting)
                {
                    setting = (RedisConfigurationSetting)extSetting.Extend;
                }
                else
                {
                    throw new InvalidOperationException($"未发现与 {typeof(RedisLocker).FullName} 相匹配的配置。");
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(optValue.ConfigName))
                {
                    var section = ConfigurationUnity.GetSection <LockerConfigurationSection>();
                    if (section != null && section.GetSetting(optValue.ConfigName) is ExtendConfigurationSetting extSetting)
                    {
                        setting = (RedisConfigurationSetting)extSetting.Extend;
                    }
                    else
                    {
                        throw new InvalidOperationException($"无效的配置节: {optValue.ConfigName}。");
                    }
                }
                else
                {
                    setting = new RedisConfigurationSetting
                    {
                        Password         = optValue.Password,
                        ConnectionString = optValue.ConnectionString,
                        DefaultDb        = optValue.DefaultDb,
                        ConnectTimeout   = optValue.ConnectTimeout,
                        LockTimeout      = optValue.LockTimeout,
                        SyncTimeout      = optValue.SyncTimeout,
                        WriteBuffer      = optValue.WriteBuffer,
                        PoolSize         = optValue.PoolSize,
                        SerializerType   = optValue.SerializerType,
                        Ssl       = optValue.Ssl,
                        Twemproxy = optValue.Twemproxy
                    };

                    RedisHelper.ParseHosts(setting, optValue.Hosts);
                }
            }

            if (setting != null)
            {
                (this as IConfigurationSettingHostService).Attach(setting);
            }
        }
コード例 #3
0
        public IConfigurationSettingItem Parse(IConfiguration configuration)
        {
            var setting = new RedisConfigurationSetting();

            setting.ConnectionString = configuration["connectionString"];
            setting.Twemproxy        = configuration["twemproxy"].To(false);
            var configNode = configuration.GetSection("config");

            if (configNode.Exists())
            {
                var serializerType = configNode["serializerType"];
                if (!string.IsNullOrEmpty(serializerType))
                {
                    setting.SerializerType = serializerType.ParseType();
                }

                setting.PoolSize        = configNode["poolSize"].To <int?>();
                setting.DefaultDb       = configNode["defaultDb"].To(0);
                setting.DbRange         = configNode["dbRange"];
                setting.KeyRule         = configNode["keyRule"];
                setting.Password        = configNode["password"];
                setting.Ssl             = configNode["ssl"].To <bool>();
                setting.WriteBuffer     = configNode["writeBuffer"].To <int?>();
                setting.LockTimeout     = configNode["lockTimeout"].ToTimeSpan(TimeSpan.FromSeconds(10));
                setting.ConnectTimeout  = configNode["connectTimeout"].ToTimeSpan(TimeSpan.FromMilliseconds(5000));
                setting.SyncTimeout     = configNode["syncTimeout"].ToTimeSpan(TimeSpan.FromMilliseconds(10000));
                setting.RetryDelayTime  = configNode["retryDelayTime"].ToTimeSpan(TimeSpan.FromSeconds(20));
                setting.RetryTimes      = configNode["retryTimes"].To <int?>();
                setting.SlidingTime     = configNode["slidingTime"].ToTimeSpan();
                setting.IgnoreException = configNode["ignoreException"].To(true);

                var hosts = configNode.GetSection("hosts");
                if (!hosts.Exists())
                {
                    hosts = configNode.GetSection("host");
                }

                foreach (var nd in hosts.GetChildren())
                {
                    var host = new RedisHost(nd["server"], nd["port"].To(0))
                    {
                        ReadOnly = nd["readonly"].To(false)
                    };

                    setting.Hosts.Add(host);
                }
            }

            return(setting);
        }
コード例 #4
0
        public IConfigurationSettingItem Parse(System.Xml.XmlNode section)
        {
            var setting = new RedisConfigurationSetting();

            setting.ConnectionString = section.GetAttributeValue("connectionString");
            setting.Twemproxy        = section.GetAttributeValue <bool>("twemproxy");
            var configNode = section.SelectSingleNode("config");

            if (configNode != null)
            {
                var serializerType = configNode.GetAttributeValue("serializerType");
                if (!string.IsNullOrEmpty(serializerType))
                {
                    setting.SerializerType = serializerType.ParseType();
                }

                setting.PoolSize        = configNode.GetAttributeValue <int?>("poolSize");
                setting.DefaultDb       = configNode.GetAttributeValue("defaultDb", 0);
                setting.DbRange         = configNode.GetAttributeValue("dbRange");
                setting.KeyRule         = configNode.GetAttributeValue("keyRule");
                setting.Password        = configNode.GetAttributeValue("password");
                setting.Ssl             = configNode.GetAttributeValue <bool>("ssl");
                setting.WriteBuffer     = configNode.GetAttributeValue <int?>("writeBuffer");
                setting.LockTimeout     = configNode.GetAttributeValue("lockTimeout").ToTimeSpan(TimeSpan.FromSeconds(10));
                setting.ConnectTimeout  = configNode.GetAttributeValue("connectTimeout").ToTimeSpan(TimeSpan.FromMilliseconds(5000));
                setting.SyncTimeout     = configNode.GetAttributeValue("syncTimeout").ToTimeSpan(TimeSpan.FromMilliseconds(10000));
                setting.RetryDelayTime  = configNode.GetAttributeValue("retryDelayTime").ToTimeSpan(TimeSpan.FromSeconds(20));
                setting.RetryTimes      = configNode.GetAttributeValue("retryTimes").To <int?>();
                setting.SlidingTime     = configNode.GetAttributeValue("slidingTime").ToTimeSpan();
                setting.IgnoreException = configNode.GetAttributeValue("ignoreException").To(true);

                foreach (XmlNode nd in configNode.SelectNodes("host"))
                {
                    var host = new RedisHost(nd.GetAttributeValue("server"), nd.GetAttributeValue("port", 0))
                    {
                        ReadOnly = nd.GetAttributeValue("readonly", false)
                    };

                    setting.Hosts.Add(host);
                }
            }

            return(setting);
        }
コード例 #5
0
        internal RedisHashSet(
            RedisConfigurationSetting setting,
            string cacheKey,
            Func <IEnumerable <Tuple <TKey, TValue, ICacheItemExpiration> > > initializeSet,
            CSRedisClient client,
            Func <RedisCacheItem <TValue>, string> serialize,
            Func <string, RedisCacheItem <TValue> > deserialize,
            bool checkExpiration)
        {
            _setting       = setting;
            _cacheKey      = cacheKey;
            _client        = client;
            _serialize     = serialize;
            _deserialize   = deserialize;
            _initializeSet = initializeSet;

            Initialize();

            if (checkExpiration)
            {
                StartExpireTask();
            }
        }
コード例 #6
0
        public IConfigurationSettingItem Parse(IConfiguration configuration)
        {
            var setting = new RedisConfigurationSetting();

            setting.ConnectionString = configuration["connectionString"];
            setting.Twemproxy        = configuration["twemproxy"].To(false);
            var configNode = configuration.GetSection("config");

            if (configNode.Exists())
            {
                var serializerType = configNode["serializerType"];
                if (!string.IsNullOrEmpty(serializerType))
                {
                    setting.SerializerType = serializerType.ParseType();
                }

                setting.PoolSize     = configNode["poolSize"].To <int?>();
                setting.DefaultDb    = configNode["defaultDb"].To(0);
                setting.Password     = configNode["password"];
                setting.Ssl          = configNode["ssl"].To <bool>();
                setting.WriteBuffer  = configNode["writeBuffer"].To <int?>();
                setting.AdvanceDelay = configNode["advanceDelay"].To <double?>();
                setting.LockTimeout  = configNode["lockTimeout"].To(10);

                foreach (var nd in configNode.GetSection("host").GetChildren())
                {
                    var host = new RedisHost();
                    host.Server   = nd["server"];
                    host.Port     = nd["port"].To(0);
                    host.ReadOnly = nd["readonly"].To(false);

                    setting.Hosts.Add(host);
                }
            }

            return(setting);
        }
コード例 #7
0
        public IConfigurationSettingItem Parse(System.Xml.XmlNode section)
        {
            var setting = new RedisConfigurationSetting();

            setting.ConnectionString = section.GetAttributeValue("connectionString");
            setting.Twemproxy        = section.GetAttributeValue <bool>("twemproxy");
            var configNode = section.SelectSingleNode("config");

            if (configNode != null)
            {
                var serializerType = configNode.GetAttributeValue("serializerType");
                if (!string.IsNullOrEmpty(serializerType))
                {
                    setting.SerializerType = serializerType.ParseType();
                }

                setting.PoolSize     = configNode.GetAttributeValue <int?>("poolSize");
                setting.DefaultDb    = configNode.GetAttributeValue("defaultDb", 0);
                setting.Password     = configNode.GetAttributeValue("password");
                setting.Ssl          = configNode.GetAttributeValue <bool>("ssl");
                setting.WriteBuffer  = configNode.GetAttributeValue <int?>("writeBuffer");
                setting.AdvanceDelay = configNode.GetAttributeValue <double?>("advanceDelay");
                setting.LockTimeout  = configNode.GetAttributeValue("lockTimeout", 10);

                foreach (XmlNode nd in configNode.SelectNodes("host"))
                {
                    var host = new RedisHost();
                    host.Server   = nd.GetAttributeValue("server");
                    host.Port     = nd.GetAttributeValue("port", 0);
                    host.ReadOnly = nd.GetAttributeValue("readonly", false);

                    setting.Hosts.Add(host);
                }
            }

            return(setting);
        }
コード例 #8
0
ファイル: RedisComponent.cs プロジェクト: wushian/fireasy2
        void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting)
        {
            this.Setting = (RedisConfigurationSetting)setting;

#if NETSTANDARD
            var connectionStrs = new List <string>();
            if (!string.IsNullOrEmpty(this.Setting.ConnectionString))
            {
                connectionStrs.Add(this.Setting.ConnectionString);
            }
            else
            {
                foreach (var host in this.Setting.Hosts)
                {
                    var connStr = new StringBuilder($"{host.Server}");

                    #region connection build
                    if (host.Port != 0)
                    {
                        connStr.Append($":{host.Port}");
                    }

                    if (!string.IsNullOrEmpty(this.Setting.Password))
                    {
                        connStr.Append($",password={this.Setting.Password}");
                    }

                    if (this.Setting.DefaultDb != 0)
                    {
                        connStr.Append($",defaultDatabase={this.Setting.DefaultDb}");
                    }

                    connStr.Append(",allowAdmin=true");
                    #endregion

                    connectionStrs.Add(connStr.ToString());
                }
            }

            connectionLazy = new Lazy <CSRedisClient>(() => new CSRedisClient(null, connectionStrs.ToArray()));
#else
            if (!string.IsNullOrEmpty(this.Setting.ConnectionString))
            {
                Options = ConfigurationOptions.Parse(this.Setting.ConnectionString);
            }
            else
            {
                Options = new ConfigurationOptions
                {
                    DefaultDatabase    = this.Setting.DefaultDb,
                    Password           = this.Setting.Password,
                    AllowAdmin         = true,
                    Proxy              = this.Setting.Twemproxy ? Proxy.Twemproxy : Proxy.None,
                    AbortOnConnectFail = false
                };

                if (this.Setting.ConnectTimeout != null)
                {
                    Options.ConnectTimeout = (int)this.Setting.ConnectTimeout;
                }

                foreach (var host in this.Setting.Hosts)
                {
                    if (host.Port == 0)
                    {
                        Options.EndPoints.Add(host.Server);
                    }
                    else
                    {
                        Options.EndPoints.Add(host.Server, host.Port);
                    }
                }
            }

            connectionLazy = new Lazy <ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(Options));
#endif
        }
コード例 #9
0
        void IConfigurationSettingHostService.Attach(IConfigurationSettingItem setting)
        {
            if (Setting != null)
            {
                return;
            }

            Setting = (RedisConfigurationSetting)setting;

            if (!string.IsNullOrEmpty(Setting.ConnectionString))
            {
                _connectionStrs.Add(Setting.ConnectionString);
            }
            else
            {
                foreach (var host in Setting.Hosts)
                {
                    var connStr = new StringBuilder($"{host.Server}");

                    #region connection build
                    if (host.Port != 0)
                    {
                        connStr.Append($":{host.Port}");
                    }

                    if (!string.IsNullOrEmpty(Setting.Password))
                    {
                        connStr.Append($",password={Setting.Password}");
                    }

                    if (Setting.DefaultDb != 0 && string.IsNullOrEmpty(Setting.DbRange))
                    {
                        connStr.Append($",defaultDatabase={Setting.DefaultDb}");
                    }

                    if (Setting.Ssl)
                    {
                        connStr.Append($",ssl=true");
                    }

                    if (Setting.WriteBuffer != null)
                    {
                        connStr.Append($",writeBuffer={Setting.WriteBuffer}");
                    }

                    if (Setting.PoolSize != null)
                    {
                        connStr.Append($",poolsize={Setting.PoolSize}");
                    }

                    if (Setting.ConnectTimeout.Milliseconds != 5000)
                    {
                        connStr.Append($",connectTimeout={Setting.ConnectTimeout.Milliseconds}");
                    }

                    if (Setting.SyncTimeout.Milliseconds != 10000)
                    {
                        connStr.Append($",syncTimeout={Setting.SyncTimeout.Milliseconds}");
                    }

                    connStr.Append(",allowAdmin=true");
                    #endregion

                    _connectionStrs.Add(connStr.ToString());
                }
            }

            if (string.IsNullOrEmpty(Setting.DbRange))
            {
                _clients.GetOrAdd(0, () => new CSRedisClient(null, _connectionStrs.ToArray()));
            }
            else
            {
                ParseDbRange(Setting.DbRange);
                if (!string.IsNullOrEmpty(Setting.KeyRule))
                {
                    ParseKeyCapture(Setting.KeyRule);
                }
            }

            OnInitialize();
        }