예제 #1
0
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";
            ConsoleHelper.WriteLine("输入连接字符串连接RedisServer,格式为\r\nserver=127.0.0.1:6379;passwords=yswenli");

            var cnnStr = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(cnnStr))
            {
                cnnStr = "server=192.168.126.1:6378;passwords=yswenli";
            }
            RedisClient redisClient = new RedisClient(cnnStr, false);

            redisClient.Connect();

            KeysTest(redisClient);

            var db = redisClient.GetDataBase(0);

            StringTest(db);

            ConsoleHelper.ReadLine();

            HashTest(db);

            ListTest(db);

            SetTest(db);

            GeoTest(db);

            ConsoleHelper.ReadLine();
        }
예제 #2
0
        /// <summary>
        /// 连接到redis
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static string Connect(Config config)
        {
            try
            {
                if (_redisClients.ContainsKey(config.Name))
                {
                    var redisClient = _redisClients[config.Name];

                    if (!redisClient.IsConnected)
                    {
                        return(redisClient.Connect());
                    }
                    return("ok");
                }
                else
                {
                    var redisClient = new RedisClient(config.IP + ":" + config.Port, config.Password);

                    var result = redisClient.Connect();

                    if (result == "OK")
                    {
                        _redisClients.Add(config.Name, redisClient);
                    }
                    return(result);
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
예제 #3
0
        static RedisClient GetRedisClientByNodeID(string name, string nodeID)
        {
            if (_redisClients.ContainsKey(name))
            {
                var redisClient = _redisClients[name];

                var slaveNode = redisClient.ClusterNodes.Where(b => b.NodeID == nodeID).FirstOrDefault();

                if (slaveNode == null)
                {
                    return(null);
                }

                if (!_redisClients.ContainsKey(nodeID))
                {
                    var rc = new RedisClient(slaveNode.IPPort, redisClient.RedisConfig.Passwords);
                    rc.Connect();
                    _redisClients[nodeID] = rc;
                }

                if (_redisClients[nodeID].IsConnected)
                {
                    return(_redisClients[nodeID]);
                }
            }
            return(null);
        }
예제 #4
0
        public static bool AddSlave(string name, string slaveNodeID, string masterID)
        {
            if (_redisClients.ContainsKey(name))
            {
                var redisClient = _redisClients[name];

                var slaveNode = redisClient.ClusterNodes.Where(b => b.NodeID == slaveNodeID).FirstOrDefault();

                if (slaveNode == null)
                {
                    return(false);
                }

                if (!_redisClients.ContainsKey(slaveNodeID))
                {
                    var rc = new RedisClient(slaveNode.IPPort, redisClient.RedisConfig.Passwords);
                    rc.Connect();
                    _redisClients[slaveNodeID] = rc;
                }

                if (_redisClients[slaveNodeID].IsConnected)
                {
                    return(_redisClients[slaveNodeID].Replicate(masterID));
                }
            }
            return(false);
        }
예제 #5
0
        public static RedisClient RedisConnect(string ip)
        {
            RedisClient result = null;
            TimeSpan    oneSec = TimeSpan.FromSeconds(1);

            while (true)
            {
                result = new RedisClient(ip)
                {
                    ReconnectAttempts = 3,
                    ReconnectWait     = 200
                };
                try
                {
                    if (result.Connect((int)oneSec.TotalMilliseconds))
                    {
                        break;
                    }
                }
                catch (SocketException e)
                {
                    if (e.ErrorCode == 10061)
                    {
                        Log.Color(LogTable.Msg5, ConsoleColor.Red);
                    }
                }
                Thread.Sleep((int)oneSec.TotalMilliseconds);
            }
            Console.WriteLine(LogTable.Msg6);
            return(result);
        }
        /// <summary>
        /// 连接到redis
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static string Connect(Config config)
        {
            try
            {
                if (_redisClients.ContainsKey(config.Name))
                {
                    var redisClient = _redisClients[config.Name];

                    if (!redisClient.IsConnected)
                    {
                        return(redisClient.Connect());
                    }
                    return("OK");
                }
                else
                {
                    var redisClient = new RedisClient(config.IP + ":" + config.Port, config.Password, 10);

                    var result = redisClient.Connect();

                    if (result == "OK")
                    {
                        _redisClients[config.Name] = redisClient;
                    }
                    return(result);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("连接到redis失败", ex, config);
                return(ex.Message);
            }
        }
예제 #7
0
        /// <summary>
        /// 连接到redis
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static string Connect(Config config)
        {
            try
            {
                RedisClient redisClient;

                if (_redisClients.TryGetValue(config.Name, out redisClient))
                {
                    if (!redisClient.IsConnected)
                    {
                        return(redisClient.Connect());
                    }
                    return("OK");
                }
                else
                {
                    redisClient = new RedisClient(config.IP + ":" + config.Port, config.Password);

                    var result = redisClient.Connect();

                    if (result == "OK")
                    {
                        _redisClients.TryAdd(config.Name, redisClient);
                    }
                    return(result);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("连接到redis失败", ex, config);
                return(ex.Message);
            }
        }
예제 #8
0
        public bool Connect(string connectionString)
        {
            options     = RedisConnectionOptions.Parse(connectionString);
            redisClient = new RedisClient(options.Host, options.Port);
            redisClient.Connect(options);

            redisClient.Connected += (sender, args) => { EventNotify($"CsRedis Connected,Host:{options.Host}|Port:{options.Port}"); };
            return(redisClient.IsConnected);
        }
예제 #9
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Starting");

            await redisClient.Connect();

            DoWork(null);
            //_timer = new Timer(DoWork, null, TimeSpan.Zero,
            //  TimeSpan.FromSeconds(5));
        }
예제 #10
0
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";
            ConsoleHelper.WriteLine("输入ip:port连接RedisServer");

            var ipPort = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(ipPort))
            {
                ipPort = "127.0.0.1:6379";
            }
            RedisClient redisClient = new RedisClient(ipPort);

            redisClient.Connect();
            //redisClient.Connect("wenli");


            var info = redisClient.Info();

            if (info.Contains("NOAUTH Authentication required."))
            {
                while (true)
                {
                    ConsoleHelper.WriteLine("请输入redis连接密码");
                    var auth = ConsoleHelper.ReadLine();
                    if (string.IsNullOrEmpty(auth))
                    {
                        auth = "yswenli";
                    }
                    var a = redisClient.Auth(auth);
                    if (a.Contains("OK"))
                    {
                        break;
                    }
                    else
                    {
                        ConsoleHelper.WriteLine(a);
                    }
                }
            }

            //redisConnection.SlaveOf();

            //redisConnection.Ping();

            redisClient.Select(1);

            //ConsoleHelper.WriteLine(redisConnection.Type("key0"));

            ConsoleHelper.WriteLine("dbSize:{0}", redisClient.DBSize().ToString());


            RedisOperationTest(redisClient, true);
            ConsoleHelper.ReadLine();
        }
예제 #11
0
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";

            ConsoleHelper.WriteLine("输入连接字符串连接RedisServer,格式为\r\nserver=127.0.0.1:6379;passwords=yswenli");

            var cnnStr = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(cnnStr))
            {
                cnnStr = "server=127.0.0.1:6379;passwords=yswenli";
            }
            RedisClient redisClient = new RedisClient(cnnStr, false);

            redisClient.Connect();

            var rk = redisClient.GetDataBase().RandomKey();

            var crk = redisClient.Console("RandomKey");

            var type = redisClient.Type("FUND_GROUP_TG_5c8abef4c30c6b9a");

            ConsoleHelper.WriteLine(type);
            var type1 = redisClient.Type("FUND_GROUP_TG_176d0049714c618a");

            ConsoleHelper.WriteLine(type1);
            var type2 = redisClient.Type("POINT_GROUP_PG_ad011ad469744a6bbc79981c1d0811d6");

            ConsoleHelper.WriteLine(type2);
            var type3 = redisClient.Type("FUND_GROUP_TG_48fb4e9e8d6dda15");

            ConsoleHelper.WriteLine(type3);
            var type4 = redisClient.Type("POINT_GROUP_PG_8136d029050740acab7a3d24a6e88663");

            ConsoleHelper.WriteLine(type4);

            ConsoleHelper.ReadLine();
            KeysTest(redisClient);

            var db = redisClient.GetDataBase(0);

            StringTest(db);

            ConsoleHelper.ReadLine();

            HashTest(db);

            ListTest(db);

            SetTest(db);

            GeoTest(db);

            ConsoleHelper.ReadLine();
        }
예제 #12
0
        public RedisClient GetRedisClient()
        {
            RedisClient redisClient = new RedisClient(this.IPEndPoint);

            if (redisClient.Connect(1000))
            {
                redisClient.Auth(Password);
            }

            return(redisClient);
        }
예제 #13
0
 public static bool RedisConnect()
 {
     try
     {
         Redis     = new RedisClient("localhost");
         Connected = Redis.Connect(100);
         return(Connected);
     } catch (Exception ex)
     {
         ErrorMessage = ex.Message;
         return(false);
     }
 }
예제 #14
0
        private static RedisClient Connect(
            DnsEndPoint endPoint)
        {
            var client      = new RedisClient(endPoint);
            var isConnected = client.Connect(60 * 1000);

            if (!isConnected)
            {
                throw new Exception("Could not connect");
            }

            return(client);
        }
예제 #15
0
 public static bool RedisConnect(string ip, int port)
 {
     try
     {
         Redis     = new RedisClient(ip, port);
         Connected = Redis.Connect(100);
         return(Connected);
     }
     catch (Exception ex)
     {
         ErrorMessage = ex.Message;
         return(false);
     }
 }
예제 #16
0
 /// <summary>
 /// test connection
 /// </summary>
 /// <param name="timeout"></param>
 private void testConnection(int timeout)
 {
     this.Dispatcher.Invoke(new Action(delegate
     {
         btnTest.IsEnabled = false;
         btnTest.IsLoading = true;
     }));
     try
     {
         testClient.Connect(timeout);
     }
     catch (Exception e)
     {
         log.Error(e.Message);
         this.Dispatcher.Invoke(new Action(delegate
         {
             btnTest.IsLoading = false;
             btnTest.IsEnabled = true;
         }));
         MessageBox.Show("failed", "test connection failed...", MessageBoxButton.OK, MessageBoxImage.Warning);
     }
 }
예제 #17
0
 private static RedisClient GetClient()
 {
     lock (clients)
     {
         RedisClient client = null;
         var         i      = 0;
         for (; i < clients.Count; i++)
         {
             if (clients[i].CanUse)
             {
                 client = clients[i];
                 client.Use();
                 break;
             }
             else if (clients[i].Socket == null || !clients[i].Socket.Connected)
             {
                 clients.Remove(client);
             }
         }
         if (client == null && !string.IsNullOrEmpty(_host))
         {
             client = new RedisClient(_host, _port == 0 ? 6379 : _port);
             client.Connect();
             if (!string.IsNullOrEmpty(_pass))
             {
                 var _rlt = client.SendCommand(RedisCommand.Auth, _pass);
                 if (!rltToBool(_rlt))
                 {
                     log.Fatal("Redis Password Is Error[" + i + "]!");
                     return(null);
                 }
             }
             client.Use();
             clients.Add(client);
         }
         return(client);
     }
 }
예제 #18
0
        public static void Test()
        {
            ConsoleHelper.WriteLine("KeepOnTest Start");

            RedisClient redisClient = new RedisClient("server=127.0.0.1:6379;passwords=yswenli");

            redisClient.Connect();

            Console.WriteLine(redisClient.Info());

            while (true)
            {
                ConsoleHelper.ReadLine();

                try
                {
                    Console.WriteLine(redisClient.Info());
                }
                catch (Exception ex)
                {
                    Console.WriteLine(SerializeHelper.Serialize(ex));
                }
            }
        }
예제 #19
0
        internal static RedisClient GetDatabaseRedisClient(ClientType clientType, RedisConnectionOptions options, string channelName = "", int dbIndex = -1, Action <string, Exception> eventNotify = null)
        {
            string clientName;

            if (clientType.Equals(ClientType.Sub))
            {
                clientName = ClientType.Sub + "_" + channelName;
            }
            else
            {
                clientName = ClientType.Common + "_" + dbIndex;
            }
            RedisClient client = null;

            if (RedisPool.TryGetValue(clientName, out client))
            {
                return(client);
            }
            lock (SynObject)
            {
                client = new RedisClient(options.Host, options.Port);
                client.Connect(options);
                if (clientType.Equals(ClientType.Common))
                {
                    client.Select(dbIndex);
                }
                if (eventNotify != null)
                {
                    client.Connected += (sender, args) => { eventNotify($"CsRedis Connected,Host:{options.Host}|Port:{options.Port}", null); };
                }

                RedisPool.TryAdd(clientName, client);

                return(client);
            }
        }
예제 #20
0
        public bool Connect(IPEndPoint endpoint, string password)
        {
            if (_status.Equals(RedisInstanceStatus.Connected))
            {
                throw new Exception("Instance is already connected to a server.");
            }

            IPEndPoint = endpoint;
            Password   = password;
            string connString = string.Format("{0}[:{1}],password={2},defaultDatabase=0,poolsize=50,ssl=false,writeBuffer=10240,prefix=", endpoint.Address, endpoint.Port, password);

            _client = new CSRedisClient(connString);

            _pulseClient = new RedisClient(endpoint);
            bool isConnected = false;

            isConnected = _pulseClient.Connect(3000);

            if (isConnected)
            {
                string authRtn = _pulseClient.Auth(password);

                if (authRtn.ToLower().Equals("ok"))
                {
                    Tuple <string, string>[] rtn = _pulseClient.ConfigGet("*");
                    foreach (Tuple <string, string> tuple in rtn)
                    {
                        _configs[tuple.Item1] = tuple.Item2;
                        Console.WriteLine("{0}={1}", tuple.Item1, tuple.Item2);
                    }

                    _databases.Clear();
                    if (_configs.ContainsKey("databases"))
                    {
                        int dbCount = 0;

                        if (int.TryParse(_configs["databases"], out dbCount))
                        {
                            for (int i = 0; i < dbCount; i++)
                            {
                                RedisInstanceDatabase db = new RedisInstanceDatabase(this)
                                {
                                    Index = i,
                                };
                                _databases.Add(db);
                            }
                        }
                    }


                    string info = _pulseClient.Info();
                    Console.WriteLine(info);

                    string   section   = string.Empty;
                    string[] infoItems = info.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string item in infoItems)
                    {
                        string[] keyvalue = item.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                        if (keyvalue.Length == 1)
                        {
                            section = keyvalue[0].Substring(2, keyvalue[0].Length - 2);
                        }
                        else if (keyvalue.Length == 2)
                        {
                            switch (section.ToLower())
                            {
                            case "server":
                                this.Infos.Servers[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "clients":
                                this.Infos.Clients[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "memory":
                                this.Infos.Memory[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "persistence":
                                this.Infos.Persistence[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "stats":
                                this.Infos.Stats[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "replication":
                                this.Infos.Replication[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "cpu":
                                this.Infos.CPU[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "cluster":
                                this.Infos.Cluster[keyvalue[0]] = keyvalue[1].Trim();
                                break;

                            case "keyspace":
                                this.Infos.Keyspace[keyvalue[0]] = keyvalue[1].Trim();
                                int dbIndex = -1;
                                if (int.TryParse(keyvalue[0].Substring(keyvalue[0].Length - 1, 1), out dbIndex))
                                {
                                    RedisInstanceDatabase db = _databases[dbIndex];
                                    string[] valueStrings    = keyvalue[1].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                                    foreach (string valueString in valueStrings)
                                    {
                                        string[] kv = valueString.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
                                        switch (kv[0])
                                        {
                                        case "keys":
                                            int keysValue = 0;
                                            if (int.TryParse(kv[1], out keysValue))
                                            {
                                                db.Keys = keysValue;
                                            }
                                            break;

                                        case "expires":
                                            int expiresValue = 0;
                                            if (int.TryParse(kv[1], out expiresValue))
                                            {
                                                db.Expires = expiresValue;
                                            }
                                            break;

                                        case "avg_ttl":
                                            int avgTTL = 0;
                                            if (int.TryParse(kv[1], out avgTTL))
                                            {
                                                db.AvgTTL = avgTTL;
                                            }
                                            break;
                                        }
                                    }
                                }
                                break;

                            default:
                                break;
                            }
                        }
                    }

                    if (_cancellationSource != null)
                    {
                        _cancellationSource.Cancel();
                    }
                    _pulseThread = new Thread(new ThreadStart(PulseThread));
                    _pulseThread.IsBackground = true;
                    _pulseThread.Start();

                    this.Status = RedisInstanceStatus.Connected;
                }
            }

            return(isConnected);
        }
예제 #21
0
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";
            ConsoleHelper.WriteLine("输入连接字符串连接RedisServer,格式为\r\nserver=127.0.0.1:6379;passwords=yswenli");

            var cnnStr = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(cnnStr))
            {
                //cnnStr = "server=127.0.0.1:6379;passwords=yswenli";
                cnnStr = "server=127.0.0.1:6379;passwords=yswenli";
            }
            RedisClient redisClient = new RedisClient(cnnStr, false);

            redisClient.Connect();

            redisClient.Select(1);

            var list = redisClient.GetDataBase().LRang("list1", 0, 10);

            //redisClient.GetDataBase().HSet("test", "", "2151");


            //var isCluster = redisClient.IsCluster;

            //var list = redisClient.ClusterNodes;

            var keys = redisClient.GetDataBase().Keys();

            var scan  = redisClient.GetDataBase().Scan();
            var hscan = redisClient.GetDataBase().HScan("haa22", 0);
            var sscan = redisClient.GetDataBase().SScan("aaa", 0);

            redisClient.GetDataBase().ZAdd("zaaa", "!#@%$^&*\r\n()^^%%&%@FSDH\r\n某月霜\r\n/.';lakdsfakdsf", 110);
            var zscan = redisClient.GetDataBase().ZScan("zaaa", 0);

            //var r = redisClient.GetDataBase().Rename("aaa", "aaa");

            //var l = redisClient.GetDataBase().LRang("testlist");

            //var z = redisClient.GetDataBase().ZRang("zaaa");

            var h = redisClient.GetDataBase().HGetAll("haa22");

            var t1 = redisClient.GetDataBase().Ttl("zaaa");
            var t2 = redisClient.GetDataBase().Ttl("haa22");
            var t3 = redisClient.GetDataBase().Pttl("key0");
            var t4 = redisClient.GetDataBase().Pttl("akey0");

            //var m = redisClient.ClusterInfo;
            //var n = redisClient.ClusterNodes;
            //var k = redisClient.KeySlot("aaa");
            //var g = redisClient.GetKeysInSlot(0);

            //redisClient.GetDataBase().SRemove("abcd", "12345");

            var info = redisClient.Info();

            var serverInfo = redisClient.ServerInfo;

            var r = redisClient.Console("scan 0");

            if (info.Contains("NOAUTH Authentication required."))
            {
                while (true)
                {
                    ConsoleHelper.WriteLine("请输入redis连接密码");
                    var auth = ConsoleHelper.ReadLine();
                    if (string.IsNullOrEmpty(auth))
                    {
                        auth = "yswenli";
                    }
                    var a = redisClient.Auth(auth);
                    if (a.Contains("OK"))
                    {
                        break;
                    }
                    else
                    {
                        ConsoleHelper.WriteLine(a);
                    }
                }
            }

            //redisClient.SlaveOf();

            var pong = redisClient.Ping();

            //redisClient.Select(1);

            PerformanceTest(redisClient);

            ConsoleHelper.WriteLine(redisClient.Type("key0"));

            ConsoleHelper.WriteLine("dbSize:{0}", redisClient.DBSize().ToString());

            RedisOperationTest(redisClient, true);
            ConsoleHelper.ReadLine();
        }
예제 #22
0
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";
            ConsoleHelper.WriteLine("输入连接字符串连接RedisServer,格式为server=127.0.0.1:6379;password=yswenli");

            var cnnStr = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(cnnStr))
            {
                cnnStr = "server=172.31.32.85:6379;password=yswenli";
            }
            RedisClient redisClient = new RedisClient(cnnStr);

            redisClient.Connect();

            //var s= redisClient.Select(159);
            //s= redisClient.Select(160);

            //var z = redisClient.Type("zaaa");

            //var scan = redisClient.GetDataBase().Scan();
            //var hscan = redisClient.GetDataBase().HScan("haa2", 0);
            //var sscan = redisClient.GetDataBase().SScan("aaa", 0);
            //var zscan = redisClient.GetDataBase().ZScan("zaaa", 0);

            var r = redisClient.GetDataBase().Rename("aaa", "aaa");


            var info = redisClient.Info();

            if (info.Contains("NOAUTH Authentication required."))
            {
                while (true)
                {
                    ConsoleHelper.WriteLine("请输入redis连接密码");
                    var auth = ConsoleHelper.ReadLine();
                    if (string.IsNullOrEmpty(auth))
                    {
                        auth = "yswenli";
                    }
                    var a = redisClient.Auth(auth);
                    if (a.Contains("OK"))
                    {
                        break;
                    }
                    else
                    {
                        ConsoleHelper.WriteLine(a);
                    }
                }
            }

            //redisConnection.SlaveOf();

            //redisConnection.Ping();

            redisClient.Select(1);

            //ConsoleHelper.WriteLine(redisConnection.Type("key0"));

            ConsoleHelper.WriteLine("dbSize:{0}", redisClient.DBSize().ToString());


            RedisOperationTest(redisClient, true);
            ConsoleHelper.ReadLine();
        }
예제 #23
0
        static void Main(string[] args)
        {
            if (AppDomain.CurrentDomain.IsDefaultAppDomain())
            {
                // RazorEngine cannot clean up from the default appdomain...
                Console.WriteLine("Switching to secound AppDomain, for RazorEngine...");
                AppDomainSetup adSetup = new AppDomainSetup();
                adSetup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
                var current = AppDomain.CurrentDomain;
                // You only need to add strongnames when your appdomain is not a full trust environment.
                var strongNames = new StrongName[0];

                var domain = AppDomain.CreateDomain(
                    "MyMainDomain", null,
                    current.SetupInformation, new PermissionSet(PermissionState.Unrestricted),
                    strongNames);
                var exitCode = domain.ExecuteAssembly(Assembly.GetExecutingAssembly().Location);
                // RazorEngine will cleanup.
                AppDomain.Unload(domain);
                return;
            }

            RedisClient rc = new RedisClient(ConfigurationManager.AppSettings.Get("redishost"));

            rc.Connect(1000);


            if (ConfigurationManager.AppSettings.Get("password") != "")
            {
                rc.Auth(ConfigurationManager.AppSettings.Get("password"));
            }



            //读取出所有信息

            List <Message> unSendMessage = new List <Message>();
            //for (var i = 0; i < unSendCount; i++) {
            //    unSendMessage.Add(rc.LPop(""));
            //}
            string item;

            while ((item = rc.LPop("message")) != null)
            {
                unSendMessage.Add(new Message(item));
            }
            if (unSendMessage.Count == 0)
            {
                Console.WriteLine($"没有待发送消息");
                return;
            }

            Console.WriteLine($"有{unSendMessage.Count}个待发送消息");

            //string[] unSendMessage = rc.LRange("message", 0, unSendCount);
            SendMail("检测报告", unSendMessage);

            //rc.LRem("message", 0, unSendCount);

            //rc.a("message");


            Console.WriteLine($"{unSendMessage.Count}个消息 发送完成");
        }
예제 #24
0
        /// <summary>
        /// ID
        /// 想要运行的文件全路径
        /// 想要运行的文件参数
        /// 日志路径
        /// 日志格式
        /// </summary>
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            rc = new RedisClient(ConfigurationManager.AppSettings.Get("redishost"));

            try
            {
                rc.Connect(1000);

                IsDebug = Boolean.Parse(ConfigurationManager.AppSettings.Get("debug"));

                if (ConfigurationManager.AppSettings.Get("password") != "")
                {
                    rc.Auth(ConfigurationManager.AppSettings.Get("password"));
                }
                if (IsDebug)
                {
                    rc.LPush("debug", args);
                    debugprefix = "debug_";
                }

                runUid   = args[0];
                filepath = args[1];
                runargs  = args[2];
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();

                rc.HSet(debugprefix + "status_" + runUid, "startTime", DateTime.Now);
                rc.HIncrBy(debugprefix + "status_" + runUid, "errorcount", 1);
                rc.HIncrBy(debugprefix + "status_" + runUid, "runcount", 1);

                rc.HSet(debugprefix + "status_" + runUid, "updateTime", DateTime.Now);


                Process proc = new Process();
                proc.StartInfo.FileName               = "cmd.exe";
                proc.StartInfo.WorkingDirectory       = Path.GetDirectoryName(filepath);
                proc.StartInfo.Domain                 = Path.GetDirectoryName(filepath);
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError  = true;
                proc.StartInfo.RedirectStandardInput  = true;
                proc.StartInfo.UseShellExecute        = false;
                proc.StartInfo.CreateNoWindow         = true;
                proc.OutputDataReceived              += Proc_OutputDataReceived;
                proc.ErrorDataReceived               += Proc_ErrorDataReceived;
                proc.Start();
                proc.BeginErrorReadLine();
                proc.BeginOutputReadLine();


                string appcmd = string.Format(GenerateCmd(filepath), filepath, runargs);
                rc.LPush("debug", appcmd);
                proc.StandardInput.WriteLine(appcmd);
                proc.StandardInput.WriteLine("exit");
                proc.WaitForExit();

                //proc.Close();
                //proc.Dispose();

                stopwatch.Stop();

                rc.HIncrBy(debugprefix + "status_" + runUid, "errorcount", -1);
                sethistory(stopwatch.Elapsed.TotalSeconds);
            }
            catch (Exception ex)
            {
                rc.LPush(debugprefix + "error_" + runUid, ex.ToString());
            }
        }
예제 #25
0
파일: Program.cs 프로젝트: palzj/SAEA
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";
            ConsoleHelper.WriteLine("输入连接字符串连接RedisServer,格式为\r\nserver=127.0.0.1:6379;passwords=yswenli");

            var cnnStr = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(cnnStr))
            {
                //cnnStr = "server=127.0.0.1:6380;passwords=yswenli";
                cnnStr = "server=172.31.32.85:6379;passwords=yswenli";
            }
            RedisClient redisClient = new RedisClient(cnnStr);

            redisClient.Connect();

            //var keys = redisClient.GetDataBase().Keys();

            //var scan = redisClient.GetDataBase().Scan();
            //var hscan = redisClient.GetDataBase().HScan("haa22", 0);
            //var sscan = redisClient.GetDataBase().SScan("aaa", 0);
            //var zscan = redisClient.GetDataBase().ZScan("zaaa", 0);

            //var r = redisClient.GetDataBase().Rename("aaa", "aaa");

            //var l = redisClient.GetDataBase().LRang("testlist");

            //var z = redisClient.GetDataBase().ZRang("zaaa");

            //var h = redisClient.GetDataBase().HGetAll("haa22");

            redisClient.Select(0);

            //var m = redisClient.ClusterInfo;
            //var n = redisClient.ClusterNodes;
            //var k = redisClient.KeySlot("aaa");
            //var g = redisClient.GetKeysInSlot(0);

            //redisClient.GetDataBase().SRemove("abcd", "12345");

            var info = redisClient.Info();

            if (info.Contains("NOAUTH Authentication required."))
            {
                while (true)
                {
                    ConsoleHelper.WriteLine("请输入redis连接密码");
                    var auth = ConsoleHelper.ReadLine();
                    if (string.IsNullOrEmpty(auth))
                    {
                        auth = "yswenli";
                    }
                    var a = redisClient.Auth(auth);
                    if (a.Contains("OK"))
                    {
                        break;
                    }
                    else
                    {
                        ConsoleHelper.WriteLine(a);
                    }
                }
            }

            //redisConnection.SlaveOf();

            //redisConnection.Ping();

            //redisClient.Select(1);

            //ConsoleHelper.WriteLine(redisConnection.Type("key0"));

            ConsoleHelper.WriteLine("dbSize:{0}", redisClient.DBSize().ToString());

            RedisOperationTest(redisClient, true);
            ConsoleHelper.ReadLine();
        }
        protected override void OnStart()
        {
            requirePayloads.Add("create_order", null);
            requirePayloads.Add("cancel_order", null);

            _redisClientOrderChannel = new RedisClient(redisHost, redisPort);
            _redisClientQuote = new RedisClient(redisHost, redisPort);

            _redisClientOrderChannel.SubscriptionReceived += (s, e) =>
            {
                this.Print("DEBUG: {0}", e.Message.Body);
                try
                {
                    var message = ParseMessage(e.Message.Body);
                    if (message == null) return;

                    switch ((string)message["cmd"])
                    {
                        case "create_order":
                            TradeResult result = CreateOrder((JObject)message["payload"]);
                            if (result != null)
                            {
                                HandleTradeResult(result, (JObject)message["payload"]);
                            }
                            break;

                        case "get_orders":
                            HandleGetOrders((JObject)message["payload"]);
                            break;

                        case "cancel_order":
                            HandleCloseOrder((JObject)message["payload"]);
                            break;

                        case "cancel_orders_all":
                            HandleCloseAllOrders((JObject)message["payload"]);
                            break;

                        case "get_positions":
                            HandleGetPositions((JObject)message["payload"]);
                            break;

                        case "close_position":
                            HandleClosePosition((JObject)message["payload"]);
                            break;

                        case "modify_position":
                            HandleModifyPosition((JObject)message["payload"]);
                            break;

                        case "get_time":
                            HandleGetTime((JObject)message["payload"]);
                            break;
                        default:
                            //this.Print("Unhandled message", (string)message["cmd"]);
                            break;

                    }
                }
                catch (Exception ex)
                {
                    this.Print("Error processing request:" + ex.Message + "---" + ex.Source);
                    this.Print(ex.StackTrace.Replace('\n', '-'));
                }
            };

            _redisClientOrderChannel.SubscriptionChanged += (s, e) =>
            {
                Console.WriteLine("There are now {0} open channels", e.Response.Count);
            };

            _redisClientOrderChannel.Connected += (s, e) =>
            {
                this.Print("_redisClient connected");
            };

            string ping = _redisClientOrderChannel.Ping();
            this.Print(ping);
            this.Print(_redisClientOrderChannel.Time());
            new Task(() =>
            {
                this.Positions.Opened += (e) =>
                {
                    try
                    {
                        this.Print("Position opened {0}", e.Position.Id);
                        // already handled
                        var key = _getPositionString(e.Position, "market_order");
                        if (alreadyHandledActions.ContainsKey(key))
                        {
                            alreadyHandledActions.Remove(key);
                            return;
                        }
                        HandlePositionOpened(e.Position);
                    }
                    catch (Exception ex)
                    {
                        this.Print("Error Positions.Opened:" + ex.Message + "---" + ex.Source);
                        this.Print(ex.StackTrace.Replace('\n', '-'));
                    }
                };
                this.Positions.Closed += (e) =>
                {
                    try
                    {
                        this.Print("Position closed {0}", e.Position.Id);
                        var key = _getPositionString(e.Position, "close_position");
                        if (alreadyHandledActions.ContainsKey(key))
                        {
                            alreadyHandledActions.Remove(key);
                            return;
                        }
                        HandlePositionClosed(e.Position);
                    }
                    catch (Exception ex)
                    {
                        this.Print("Error Positions.Closed:" + ex.Message + "---" + ex.Source);
                        this.Print(ex.StackTrace.Replace('\n', '-'));
                    }
                };
            }).Start();

            foreach (var sym in symbols)
            {
                var symbol = this.MarketData.GetSymbol(sym);
                this.MarketData.GetMarketDepth(symbol).Updated += () =>
                {
                    var book = this.MarketData.GetMarketDepth(symbol);
                    var askDepth = book.AskEntries.Sum(e => e.Volume);
                    var bidDepth = book.BidEntries.Sum(e => e.Volume);

                    var asks = this.include_depth ? book.AskEntries.Select(t => new JObject(new JProperty(t.Price.ToString(), t.Volume))) : null;
                    var bids = this.include_depth ? book.BidEntries.Select(t => new JObject(new JProperty(t.Price.ToString(), t.Volume))) : null;

                    JObject o = new JObject(
                       new JProperty("cmd", "tick"),
                       new JProperty("payload", new JObject(
                            new JProperty("symbol", symbol.Code.ToLower()),
                            new JProperty("bid", symbol.Bid),
                            new JProperty("ask", symbol.Ask),
                            new JProperty("bidDepth", bidDepth),
                            new JProperty("askDepth", askDepth),
                            new JProperty("bids", bids),
                            new JProperty("asks", asks),
                            new JProperty("pip_size", symbol.PipSize),
                            new JProperty("spread", Math.Round(symbol.Spread / symbol.PipSize, 1)),
                            new JProperty("time", this.Server.Time.ToString("yyyy-MM-dd HH:mm:ss.FFFZ", CultureInfo.InvariantCulture))
                           )
                       ));

                    quote_queue.Enqueue(o);
                };
            }

            new Task(() =>
            {
                while (!_shuttingDown)
                {
                    JObject o = new JObject(
                       new JProperty("cmd", "account_status"),
                       new JProperty("payload", new JObject(
                            new JProperty("acct_id", this.Account.Number),
                            new JProperty("is_live", this.Account.IsLive),
                            new JProperty("balance", this.Account.Balance),
                            new JProperty("equity", this.Account.Equity),
                            new JProperty("unrealized_gross_profit", this.Account.UnrealizedGrossProfit)
                           )
                       ));

                    _publishMessage(o);

                    Thread.Sleep(1000 * 10);
                }
            }).Start();

            new Task(() =>
            {
                while (Quotes && !_shuttingDown)
                {
                    if (!_redisClientQuote.IsConnected) _redisClientQuote.Connect(5000);
                    if (quote_queue.Count > 0)
                    {
                        _redisClientQuote.StartPipe();
                        while (quote_queue.Count > 0)
                        {
                            JObject quote = quote_queue.Dequeue();
                            _redisClientQuote.Publish(quote_channel, quote.ToString(Formatting.None));
                        }
                        _redisClientQuote.EndPipe();
                    }
                    Thread.Sleep(50);
                }
            }).Start();

            new Task(() =>
            {
                try
                {
                    _redisClientOrderChannel.PSubscribe(order_channel_listen);
                }
                catch (Exception e)
                {
                    this.Print(e.Message);
                }
            }).Start();

            base.OnStart();
        }
예제 #27
0
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";
            ConsoleHelper.WriteLine("输入连接字符串连接RedisServer,格式为\r\nserver=127.0.0.1:6379;passwords=yswenli");

            var cnnStr = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(cnnStr))
            {
                cnnStr = "server=127.0.0.1:6379;passwords=yswenli";
            }
            RedisClient redisClient = new RedisClient(cnnStr, false);

            redisClient.Connect();

            KeysTest(redisClient);

            StringTest(redisClient.GetDataBase(0));

            HashTest(redisClient.GetDataBase());

            ListTest(redisClient.GetDataBase());

            SetTest(redisClient.GetDataBase());



            //var list = redisClient.ClusterNodes;



            //var r = redisClient.GetDataBase().Rename("aaa", "aaa");

            //var l = redisClient.GetDataBase().LRang("testlist");

            //var z = redisClient.GetDataBase().ZRang("zaaa");

            var h = redisClient.GetDataBase().HGetAll("haa22");

            var t1 = redisClient.GetDataBase().Ttl("zaaa");
            var t2 = redisClient.GetDataBase().Ttl("haa22");
            var t3 = redisClient.GetDataBase().Pttl("key0");
            var t4 = redisClient.GetDataBase().Pttl("akey0");

            //var m = redisClient.ClusterInfo;
            //var n = redisClient.ClusterNodes;
            //var k = redisClient.KeySlot("aaa");
            //var g = redisClient.GetKeysInSlot(0);

            //redisClient.GetDataBase().SRemove("abcd", "12345");

            PerformanceTest(redisClient);

            ConsoleHelper.WriteLine(redisClient.Type("key0"));

            ConsoleHelper.WriteLine("dbSize:{0}", redisClient.DBSize().ToString());

            RedisOperationTest(redisClient, true);

            ConsoleHelper.ReadLine();
        }
예제 #28
0
        protected override void OnStart()
        {
            requirePayloads.Add("create_order", null);
            requirePayloads.Add("cancel_order", null);


            _redisClientOrderChannel = new RedisClient(redisHost, redisPort);
            _redisClientQuote        = new RedisClient(redisHost, redisPort);


            _redisClientOrderChannel.SubscriptionReceived += (s, e) =>
            {
                this.Print("DEBUG: {0}", e.Message.Body);
                try
                {
                    var message = ParseMessage(e.Message.Body);
                    if (message == null)
                    {
                        return;
                    }

                    switch ((string)message["cmd"])
                    {
                    case "create_order":
                        TradeResult result = CreateOrder((JObject)message["payload"]);
                        if (result != null)
                        {
                            HandleTradeResult(result, (JObject)message["payload"]);
                        }
                        break;

                    case "get_orders":
                        HandleGetOrders((JObject)message["payload"]);
                        break;

                    case "cancel_order":
                        HandleCloseOrder((JObject)message["payload"]);
                        break;

                    case "cancel_orders_all":
                        HandleCloseAllOrders((JObject)message["payload"]);
                        break;

                    case "get_positions":
                        HandleGetPositions((JObject)message["payload"]);
                        break;

                    case "close_position":
                        HandleClosePosition((JObject)message["payload"]);
                        break;

                    case "modify_position":
                        HandleModifyPosition((JObject)message["payload"]);
                        break;

                    case "get_time":
                        HandleGetTime((JObject)message["payload"]);
                        break;

                    default:
                        //this.Print("Unhandled message", (string)message["cmd"]);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    this.Print("Error processing request:" + ex.Message + "---" + ex.Source);
                    this.Print(ex.StackTrace.Replace('\n', '-'));
                }
            };

            _redisClientOrderChannel.SubscriptionChanged += (s, e) =>
            {
                Console.WriteLine("There are now {0} open channels", e.Response.Count);
            };

            _redisClientOrderChannel.Connected += (s, e) =>
            {
                this.Print("_redisClient connected");
            };

            string ping = _redisClientOrderChannel.Ping();

            this.Print(ping);
            this.Print(_redisClientOrderChannel.Time());
            new Task(() =>
            {
                this.Positions.Opened += (e) =>
                {
                    try
                    {
                        this.Print("Position opened {0}", e.Position.Id);
                        // already handled
                        var key = _getPositionString(e.Position, "market_order");
                        if (alreadyHandledActions.ContainsKey(key))
                        {
                            alreadyHandledActions.Remove(key);
                            return;
                        }
                        HandlePositionOpened(e.Position);
                    }
                    catch (Exception ex)
                    {
                        this.Print("Error Positions.Opened:" + ex.Message + "---" + ex.Source);
                        this.Print(ex.StackTrace.Replace('\n', '-'));
                    }
                };
                this.Positions.Closed += (e) =>
                {
                    try
                    {
                        this.Print("Position closed {0}", e.Position.Id);
                        var key = _getPositionString(e.Position, "close_position");
                        if (alreadyHandledActions.ContainsKey(key))
                        {
                            alreadyHandledActions.Remove(key);
                            return;
                        }
                        HandlePositionClosed(e.Position);
                    }
                    catch (Exception ex)
                    {
                        this.Print("Error Positions.Closed:" + ex.Message + "---" + ex.Source);
                        this.Print(ex.StackTrace.Replace('\n', '-'));
                    }
                };
            }).Start();

            foreach (var sym in symbols)
            {
                var symbol = this.MarketData.GetSymbol(sym);
                this.MarketData.GetMarketDepth(symbol).Updated += () =>
                {
                    var book     = this.MarketData.GetMarketDepth(symbol);
                    var askDepth = book.AskEntries.Sum(e => e.Volume);
                    var bidDepth = book.BidEntries.Sum(e => e.Volume);


                    var asks = this.include_depth ? book.AskEntries.Select(t => new JObject(new JProperty(t.Price.ToString(), t.Volume))) : null;
                    var bids = this.include_depth ? book.BidEntries.Select(t => new JObject(new JProperty(t.Price.ToString(), t.Volume))) : null;

                    JObject o = new JObject(
                        new JProperty("cmd", "tick"),
                        new JProperty("payload", new JObject(
                                          new JProperty("symbol", symbol.Code.ToLower()),
                                          new JProperty("bid", symbol.Bid),
                                          new JProperty("ask", symbol.Ask),
                                          new JProperty("bidDepth", bidDepth),
                                          new JProperty("askDepth", askDepth),
                                          new JProperty("bids", bids),
                                          new JProperty("asks", asks),
                                          new JProperty("pip_size", symbol.PipSize),
                                          new JProperty("spread", Math.Round(symbol.Spread / symbol.PipSize, 1)),
                                          new JProperty("time", this.Server.Time.ToString("yyyy-MM-dd HH:mm:ss.FFFZ", CultureInfo.InvariantCulture))
                                          )
                                      ));

                    quote_queue.Enqueue(o);
                };
            }

            new Task(() =>
            {
                while (!_shuttingDown)
                {
                    JObject o = new JObject(
                        new JProperty("cmd", "account_status"),
                        new JProperty("payload", new JObject(
                                          new JProperty("acct_id", this.Account.Number),
                                          new JProperty("is_live", this.Account.IsLive),
                                          new JProperty("balance", this.Account.Balance),
                                          new JProperty("equity", this.Account.Equity),
                                          new JProperty("unrealized_gross_profit", this.Account.UnrealizedGrossProfit)
                                          )
                                      ));

                    _publishMessage(o);

                    Thread.Sleep(1000 * 10);
                }
            }).Start();

            new Task(() =>
            {
                while (Quotes && !_shuttingDown)
                {
                    if (!_redisClientQuote.IsConnected)
                    {
                        _redisClientQuote.Connect(5000);
                    }
                    if (quote_queue.Count > 0)
                    {
                        _redisClientQuote.StartPipe();
                        while (quote_queue.Count > 0)
                        {
                            JObject quote = quote_queue.Dequeue();
                            _redisClientQuote.Publish(quote_channel, quote.ToString(Formatting.None));
                        }
                        _redisClientQuote.EndPipe();
                    }
                    Thread.Sleep(50);
                }
            }).Start();

            new Task(() =>
            {
                try
                {
                    _redisClientOrderChannel.PSubscribe(order_channel_listen);
                }
                catch (Exception e)
                {
                    this.Print(e.Message);
                }
            }).Start();

            base.OnStart();
        }
예제 #29
0
파일: Program.cs 프로젝트: bagezifu/SAEA
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";

            ConsoleHelper.WriteLine("输入连接字符串连接RedisServer,格式为\r\nserver=127.0.0.1:6379;passwords=yswenli");

            var cnnStr = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(cnnStr))
            {
                cnnStr = "server=127.0.0.1:6379;passwords=yswenli";
            }
            RedisClient redisClient = new RedisClient(cnnStr, false);

            redisClient.Connect();

            var info = redisClient.Info();

            #region 异步测试

            redisClient.GetDataBase().HSetAsync(TimeSpan.FromSeconds(5), "hid", "key", "val");
            var r  = redisClient.GetDataBase().HGetAsync(TimeSpan.FromSeconds(5), "hid", "key").Result;
            var rr = redisClient.GetDataBase().HDelAsync(TimeSpan.FromSeconds(5), "hid", "key").Result;


            //var batch = redisClient.GetDataBase().CreatedBatch();
            //for (int i = 0; i < 100000; i++)
            //{
            //    batch.ZAddAsync("yswenliG", i.ToString(), i);
            //}
            //_ = batch.Execute().ToList();
            #endregion

            #region scan

            var sresult1 = redisClient.GetDataBase().Scan();
            var sresult2 = redisClient.GetDataBase().Scan(0, "*", -1);

            #endregion

            StringPerformanceTest(redisClient);

            BatchTest(redisClient);


            var rk = redisClient.GetDataBase().RandomKey();

            var crk = redisClient.Console("RandomKey");

            ConsoleHelper.ReadLine();

            KeysTest(redisClient);

            var db = redisClient.GetDataBase(0);

            StringTest(db);

            ConsoleHelper.ReadLine();

            HashTest(db);

            ListTest(db);

            SetTest(db);

            GeoTest(db);

            ConsoleHelper.ReadLine();
        }
예제 #30
0
파일: Program.cs 프로젝트: yswenli/SAEA
        static void Main(string[] args)
        {
            ConsoleHelper.Title = "SAEA.RedisSocketTest";

            #region KeepOnTest

            //KeepOnTest.Test();

            #endregion


            ConsoleHelper.WriteLine("输入连接字符串连接RedisServer,格式为\r\nserver=127.0.0.1:6379;passwords=yswenli");

            var cnnStr = ConsoleHelper.ReadLine();

            if (string.IsNullOrEmpty(cnnStr))
            {
                cnnStr = "server=127.0.0.1:6379;passwords=yswenli";
            }
            RedisClient redisClient = new RedisClient(cnnStr, false);

            redisClient.Connect();

            var info = redisClient.Info();

            var response = redisClient.Console("role");

            var bh = redisClient.GetDataBase().HGetAll("Task");

            var zr = redisClient.GetDataBase().ZScan("ArbitrationRecords");

            #region scan

            var sresult1 = redisClient.GetDataBase().Scan();
            var sresult2 = redisClient.GetDataBase().Scan(0, "*", -1);

            #endregion

            for (int i = 0; i < 16; i++)
            {
                redisClient.Select(i);
            }

            redisClient.Select(0);


            StringPerformanceTest(redisClient);

            //BatchTest(redisClient);


            var rk = redisClient.GetDataBase().RandomKey();

            var crk = redisClient.Console("RandomKey");

            ConsoleHelper.ReadLine();

            keysTest(redisClient);

            var db = redisClient.GetDataBase(0);

            StringTest(db);

            ConsoleHelper.ReadLine();

            HashTest(db);

            ListTest(db);

            SetTest(db);

            GeoTest(db);

            #region redis stream test

            new RedisStreamTest(redisClient).Test();

            #endregion

            ConsoleHelper.ReadLine();
        }