Exemplo n.º 1
0
        /// <summary>创建连接客户端</summary>
        /// <returns></returns>
        protected virtual RedisClient OnCreate()
        {
            var server = Server?.Trim();

            if (server.IsNullOrEmpty())
            {
                throw new ArgumentNullException(nameof(Server));
            }

            // 初始化服务器地址列表
            var svrs = _servers;

            if (svrs == null)
            {
                var ss   = server.Split(',', StringSplitOptions.RemoveEmptyEntries);
                var uris = new NetUri[ss.Length];
                for (var i = 0; i < ss.Length; i++)
                {
                    var svr2 = ss[i];
                    if (!svr2.Contains("://"))
                    {
                        svr2 = "tcp://" + svr2;
                    }

                    var uri = new NetUri(svr2);
                    if (uri.Port == 0)
                    {
                        uri.Port = 6379;
                    }
                    uris[i] = uri;
                }
                svrs = _servers = uris;
            }

            // 一定时间后,切换回来主节点
            var idx = _idxServer;

            if (idx > 0)
            {
                var now = DateTime.Now;
                if (_nextTrace.Year < 2000)
                {
                    _nextTrace = now.AddSeconds(300);
                }
                if (now > _nextTrace)
                {
                    _nextTrace = DateTime.MinValue;

                    idx = _idxServer = 0;
                }
            }

            if (idx != _idxLast)
            {
                XTrace.WriteLine("Redis使用 {0}", svrs[idx % svrs.Length]);

                _idxLast = idx;
            }

            // 选择服务器,修改实例名,后面用于埋点
            var svr = svrs[idx % svrs.Length];

            if (Name.IsNullOrEmpty() || Name.EqualIgnoreCase("Redis", "FullRedis"))
            {
                Name = svr.Host ?? svr.Address.ToString();
            }

            var rc = new RedisClient(this, svr)
            {
                Log = Log
            };

            //if (rds.Db > 0) rc.Select(rds.Db);

            return(rc);
        }
Exemplo n.º 2
0
Arquivo: Redis.cs Projeto: stantoxt/X
        /// <summary>创建连接客户端</summary>
        /// <returns></returns>
        protected virtual RedisClient OnCreate()
        {
            var svr = Server?.Trim();

            if (svr.IsNullOrEmpty())
            {
                throw new ArgumentNullException(nameof(Server));
            }

            var svrs = _servers;

            if (svrs == null)
            {
                var ss   = svr.Split(",");
                var uris = new NetUri[ss.Length];
                for (var i = 0; i < ss.Length; i++)
                {
                    var svr2 = ss[i];
                    if (!svr2.Contains("://"))
                    {
                        svr2 = "tcp://" + svr2;
                    }

                    var uri = new NetUri(svr2);
                    if (uri.Port == 0)
                    {
                        uri.Port = 6379;
                    }
                    uris[i] = uri;
                }
                svrs = _servers = uris;
            }

            // 一定时间后,切换回来主节点
            var idx = _idxServer;

            if (idx > 0)
            {
                var now = DateTime.Now;
                if (_nextTrace.Year < 2000)
                {
                    _nextTrace = now.AddSeconds(300);
                }
                if (now > _nextTrace)
                {
                    _nextTrace = DateTime.MinValue;

                    idx = _idxServer = 0;
                }
            }

            if (idx != _idxLast)
            {
                XTrace.WriteLine("Redis使用 {0}", svrs[idx % svrs.Length]);

                _idxLast = idx;
            }

            var rc = new RedisClient(this, svrs[idx % svrs.Length])
            {
                Log = Log
            };

            //if (rds.Db > 0) rc.Select(rds.Db);

            return(rc);
        }