private static void TestList()
        {
            using (var client = new RedisClient("127.0.0.1", 6379))
            {
                #region "List类型"

                client.AddItemToList("HQF.Tutorial.Redis:userInfoId1", "123");
                client.AddItemToList("HQF.Tutorial.Redis:userInfoId1", "1234");

                Console.WriteLine("List数据项条数:" + client.GetListCount("HQF.Tutorial.Redis:userInfoId1"));
                Console.WriteLine("List数据项第一条数据:" + client.GetItemFromList("HQF.Tutorial.Redis:userInfoId1", 0));
                Console.WriteLine("List所有数据");
                client.GetAllItemsFromList("HQF.Tutorial.Redis:userInfoId1").ForEach(e => Console.WriteLine(e));
                #endregion

                #region "List类型做为队列和栈使用"
                Console.WriteLine(client.GetListCount("HQF.Tutorial.Redis:userInfoId1"));
                //队列先进先出
                //Console.WriteLine(client.DequeueItemFromList("userInfoId1"));
                //Console.WriteLine(client.DequeueItemFromList("userInfoId1"));

                //栈后进先出
                Console.WriteLine("出栈" + client.PopItemFromList("HQF.Tutorial.Redis:userInfoId1"));
                Console.WriteLine("出栈" + client.PopItemFromList("HQF.Tutorial.Redis:userInfoId1"));
                #endregion
            }
        }
Exemple #2
0
        // Saving top rated posts
        public void PushTopRatedPosts(IEnumerable <Post> posts)
        {
            foreach (var post in posts)
            {
                redis.AddItemToList("topratedposts", JsonSerializer.SerializeToString(post, typeof(Post)));
            }

            // List will expire every 60min so data is always up to date
            redis.Expire("topratedposts", 60);
        }
Exemple #3
0
 public void dodajUListuPrekrsaja(string prekrsajId, string pravLiceId)
 {
     try
     {
         redis.AddItemToList("ListaPrekrsaja:" + pravLiceId, prekrsajId);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
     }
 }
Exemple #4
0
 public void AddGame(int gameID)
 {
     redis.AddItemToList(activeGamesKey, gameID.ToString());
     if (!loadedActiveGames)
     {
         LoadGames(true, false);
     }
     else
     {
         activeGames.Add(ParseGameInfo(gameID));
     }
 }
        static void Main(string[] args)
        {
            try
            {
                using (RedisClient redisClient = new RedisClient("redis://*****:*****@localhost:6379"))
                {
                    IRedisTypedClient <Person> redisUser = redisClient.As <Person>();

                    var rick = new Person {
                        Id = "Rick", Name = "Rick @ code with intent"
                    };
                    var backy = new Person {
                        Id = "Backy", Name = "Backy @ becy,com"
                    };
                    //var chen = new Person { Id = redisUser.GetNextSequence(), Name = "Chen @ becy,com" };

                    redisUser.Store(rick);
                    redisUser.Store(backy);

                    var allThePeople = redisUser.GetAll();
                    Console.WriteLine("--- Get All People ---");
                    foreach (var people in allThePeople)
                    {
                        Console.WriteLine($"Id: {people.Id}- Name: {people.Name} ");
                    }
                    //Console.WriteLine(allThePeople.Dump()); //return json format

                    Console.WriteLine("--- GetByUser ---");
                    redisClient.SetValue("ChenName", "Worameth Semapat", TimeSpan.FromSeconds(50));
                    Console.WriteLine("Get Result: " + redisClient.GetValue("ChenName"));

                    Console.WriteLine("--- Get Int ---");
                    redisClient.Set("testInt", 1);
                    var getInt = redisClient.Get <int>("testInt");
                    Console.WriteLine($"Type: {getInt.GetType().Name} - Value: {getInt}");

                    // Set Expire
                    redisClient.AddItemToList("ChenList", "Test1");
                    redisClient.AddItemToList("ChenList", "Test2");
                    redisClient.Expire("ChenList", 30);
                }
            }
            catch (RedisException ex) //When server down or invalid password
            {
                Console.WriteLine("RedisException");
                Console.WriteLine(ex.Message);
            }
        }
 public void AddItemToList(string listId, string value)
 {
     using (RedisClient rc = new RedisClient(_option.Server, _option.Port, _option.Password))
     {
         rc.AddItemToList(listId, value);
     }
 }
Exemple #7
0
        public ActionResult Redis()
        {
            RedisClient redisClient = new RedisClient("127.0.0.1", 6379);

            redisClient.AddItemToList("list", "sqlserver");         //添加列表
            var list = redisClient.GetAllItemsFromList("list");     //获取列表
            var set  = redisClient.GetAllItemsFromSet("myset");     //获取集合

            redisClient.SetEntryInHash("myhash", "sex", "remale");  //添加哈希键值对
            var dic  = redisClient.GetAllEntriesFromHash("myhash"); //获取哈希集
            var name = redisClient.GetValueFromHash("myhash", "name");
            //发布消息
            var msg = System.Text.UTF8Encoding.Default.GetBytes("thanks");

            redisClient.Publish("redischat", msg);
            redisClient.PublishMessage("redischat", "my name is llm");



            //事务
            using (var trans = redisClient.CreateTransaction())
            {
                trans.QueueCommand(r => r.Set("name", "gg"));
                trans.Commit();
            }
            return(JsonOK(redisClient.Get <string>("myname")));
        }
Exemple #8
0
        public static void Get_XAGL_WM2000YXGT_IndicatorDiagram_Mock(ModbusRtuOverTcp client, RedisClient redisClient, string messageString)
        {
            var par = messageString.FromJson <ControlRequest>();

            try
            {
                var indicatorDiagram = new IotDataOilWellIndicatorDiagram()
                {
                    AlarmCode = 0,
                    AlarmMsg  = "正常"
                };

                indicatorDiagram.WellId       = par.DeviceId;
                indicatorDiagram.DeviceTypeId = par.DeviceTypeId;
                indicatorDiagram.DateTime     = DateTime.Now;
                indicatorDiagram.Mock         = par.UseMockData;

                redisClient.AddItemToList("YCIOT:IOT_Data_OilWell_IndicatorDiagram", indicatorDiagram.ToJson().IndentJson());
                redisClient.Set($"Group:OilWell:{par.DeviceName}-{par.DeviceId}:IndicatorDiagram", indicatorDiagram);
                redisClient.Set($"Single:OilWell:IndicatorDiagram:{par.DeviceName}-{par.DeviceId}", indicatorDiagram);
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                Logger.Error(ex.StackTrace);
                Logger.Error(ex.Source);

                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, -1, ex.Message);
                }
            }
        }
Exemple #9
0
 public static void AddItemToList(string listId, string value)
 {
     using (RedisClient client = GetClient())
     {
         client.AddItemToList(listId, value);
     }
 }
Exemple #10
0
        public static void Get_XAGL_WM2000KZG_ControllerStatus_Mock(ModbusRtuOverTcp client, RedisClient redisClient, string messageString)
        {
            var par = messageString.FromJson <ControlRequest>();

            try
            {
                var iotDataOilWellControllerState = new IotDataOilWellControllerState()
                {
                    NetworkNode = ClientInfo.ManyIpAddress,
                    AlarmCode   = 0,
                    AlarmMsg    = "正常"
                };

                iotDataOilWellControllerState.WellId       = par.DeviceId;
                iotDataOilWellControllerState.DeviceTypeId = par.DeviceTypeId;
                iotDataOilWellControllerState.DateTime     = DateTime.Now;
                iotDataOilWellControllerState.Mock         = par.UseMockData;

                redisClient.AddItemToList("YCIOT:IOT_Data_OilWell_ControllerState", iotDataOilWellControllerState.ToJson().IndentJson());
                redisClient.Set($"Group:OilWell:{par.DeviceName}-{par.DeviceId}:ControllerState", iotDataOilWellControllerState);
                redisClient.Set($"Single:OilWell:ControllerState:{par.DeviceName}-{par.DeviceId}", iotDataOilWellControllerState);
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                Logger.Error(ex.StackTrace);
                Logger.Error(ex.Source);

                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, -1, ex.Message);
                }
            }
        }
Exemple #11
0
 /// <summary>
 /// 添加value 到现有List
 /// </summary>
 /// <param name="key"></param>
 /// <param name="value"></param>
 public void AddItemToList(string key, string value)
 {
     using (RedisClient redisClient = GetRedisClient())
     {
         redisClient.AddItemToList(key, value);
     }
 }
Exemple #12
0
 /// <summary>
 /// 添加至list
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="key"></param>
 /// <param name="val"></param>
 public static void AddEntityToList <T>(string key, T val)
 {
     using (var client = new RedisClient(Host))
     {
         string value = JsonConvert.SerializeObject(val);
         client.AddItemToList(key, value);
     }
 }
Exemple #13
0
 public static void lpush(String key, String value)
 {
     using (RedisClient redisClient = new RedisClient(host, port))
     {
         redisClient.AddItemToList(key, value);
         redisClient.Dispose();
     }
 }
Exemple #14
0
        public static async Task Get_LYQH_GJL_Pressure(ModbusRtuOverTcp client, RedisClient redisClient, string messageString)
        {
            var par = messageString.FromJson <ControlRequest>();

            try
            {
                IotDataOilWellPressure oillPress = new IotDataOilWellPressure
                {
                    AlarmCode = 0,
                    AlarmMsg  = "正常"
                };

                var logIotModbusPoll = par.ConvertTo <LogIotModbusPoll>();

                var modbusAddress = par.ModbusAddress;

                ClientInfo.CurrentModbusPoolAddress = modbusAddress;

                oillPress.WellId = par.DeviceId;

                oillPress.DeviceTypeId = par.DeviceTypeId;
                oillPress.Mock         = false;

                var failed = await SetPressure(redisClient, client, modbusAddress, oillPress, logIotModbusPoll, par);

                oillPress.NetworkNode = ClientInfo.ManyIpAddress;

                //用于将读取的结果写入Redis队列
                if (!failed || par.UseMockData)
                {
                    oillPress.Mock = par.UseMockData;
                    redisClient.AddItemToList("YCIOT:IOT_Data_OilWell_Pressure", oillPress.ToJson().IndentJson());
                    redisClient.Set($"Group:OilWell:{par.DeviceName}-{par.DeviceId}:Pressure", oillPress);
                    redisClient.Set($"Single:OilWell:Pressure:{par.DeviceName}-{par.DeviceId}", oillPress);
                }

                //用于通过ServerEvent给调用着返回消息
                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, failed ? -2 : 0, oillPress.ToJson().IndentJson());
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                Logger.Error(ex.StackTrace);
                Logger.Error(ex.Source);

                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, -1, ex.Message);
                }
            }
        }
        private void btnWriteToReids_Click(object sender, RoutedEventArgs e)
        {
            var appSettings = new AppSettings();
            var redisCon    = appSettings.GetString("TestRedis");

            using var redisClient = new RedisClient(redisCon);

            var json   = this.txtJson.Text;
            var listId = this.txtListId.Text;

            redisClient.AddItemToList(listId, json.IndentJson());
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            string listkey = "listlog";

            while (1 == 1)
            {
                Console.WriteLine("请输入发送的内容");
                var message = Console.ReadLine();
                using (RedisClient client = new RedisClient("127.0.0.1"))
                {
                    client.AddItemToList(listkey, message);
                }
            }
        }
        public static void Add(string name)
        {
            //Task.Factory.StartNew(() =>
            //{
            OrderInfo mod = new OrderInfo()
            {
                Name      = name,
                OrderTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
            };
            string c = JsonConvert.SerializeObject(mod);

            Console.WriteLine($"{c}下单成功!");
            string listKey = "orderlist";

            rc.AddItemToList(listKey, c);
            //});
        }
Exemple #18
0
        public void Run()
        {
            var db = new RedisClient("127.0.0.1", 6379, "lottak2014", 0);

            Console.WriteLine(db.GetAll <string>());

            db.AddItemToList("listid", "1");

            Console.WriteLine("请输入设置的键:");
            var _key = Console.ReadLine();

            Console.WriteLine("请输入设置的值:");
            var _value = Console.ReadLine();

            db.Set <string>(_key, _value);
            Console.WriteLine("设置完成=>{0}:{1}", _key, db.Get <string>(_key));

            Console.WriteLine(db.Exists(_key));
        }
Exemple #19
0
        protected override void RealTestOutPut()
        {
            RedisClient client = new RedisClient("localhost", 6379);

            "tac's value is: ".Write();
            client.Get <object>("tac").WriteLine();
            client.Increment("tac", 1);

            "now changed, tac's value is: ".Write();
            client.Get <object>("tac").WriteLine();


            "ltac's value is: ".WriteLine();
            client.GetRangeFromList("ltac", 0, -1).WriteLineEach();
            client.AddItemToList("ltac", "test" + client.Get <object>("tac"));

            "now changed, ltac's value is: ".WriteLine();
            client.GetRangeFromList("ltac", 0, -1).WriteLineEach();
        }
Exemple #20
0
        static void Main(string[] args)
        {
            string        strKey = "addItemToList";
            List <string> ls     = new List <string>()
            {
                "one", "two", "three"
            };

            ls.ForEach(x => rc.AddItemToList(strKey, x));

            ls = rc.GetAllItemsFromList(strKey);
            ls.ForEach(s => Console.WriteLine(strKey + ":" + s));
            var rcs = rc.Lists[strKey];

            rcs.Clear();
            rcs.Remove("Two");


            Console.ReadKey();
        }
        public void AddToList(string key, string element)
        {
            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentNullException("key");
            }

            if (element == null)
            {
                throw new ArgumentNullException("element");
            }

            if (this.IsDisposed)
            {
                throw new ObjectDisposedException(this.GetType().Name);
            }

            this.operation.QueueCommand(client => client.AddItemToList(key, element));

            this.IsEmpty = false;
        }
Exemple #22
0
        /// <summary>
        /// 读取配水间干压mock
        /// </summary>
        /// <param name="client"></param>
        /// <param name="redisClient"></param>
        /// <param name="messageString"></param>
        public static void Get_ZJJH_WTPM_TrunkPressure_Mock(ModbusRtuOverTcp client, RedisClient redisClient, string messageString)
        {
            var par          = messageString.FromJson <ControlRequest>();
            var waterStation = new IotDataWaterStation();

            waterStation.DeviceTypeId = par.DeviceTypeId;

            try
            {
                waterStation.AlarmCode = 0;
                waterStation.AlarmMsg  = "mock数据";
                waterStation.StationId = par.DeviceId; //注水间ID
                waterStation.Mock      = par.UseMockData;


                waterStation.Mock     = par.UseMockData;
                waterStation.DateTime = DateTime.Now;
                //用于将读取的结果写入Redis队列
                redisClient.AddItemToList("YCIOT:IOT_Data_WaterStation", waterStation.ToJson().IndentJson());
                redisClient.Set($"Group:WaterStation:{par.DeviceName}-{par.DeviceId}", waterStation);

                //用于通过ServerEvent给调用着返回消息
                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, 0, waterStation.ToJson().IndentJson());
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                Logger.Error(ex.StackTrace);
                Logger.Error(ex.Source);

                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, -1, ex.Message);
                }
            }
        }
Exemple #23
0
        public static void Get_XAGL_PumpPressure_Mock(ModbusRtuOverTcp client, RedisClient redisClient, string messageString)
        {
            var par          = messageString.FromJson <ControlRequest>();
            var pumpPressure = new IotDataPumpPressure();

            pumpPressure.DeviceTypeId = par.DeviceTypeId;

            try
            {
                pumpPressure.AlarmCode = 0;
                pumpPressure.AlarmMsg  = "mock数据";
                pumpPressure.Mock      = par.UseMockData;

                pumpPressure.PumpId   = par.DeviceId; //泵编号
                pumpPressure.Mock     = par.UseMockData;
                pumpPressure.DateTime = DateTime.Now;
                //用于将读取的结果写入Redis队列
                redisClient.AddItemToList("YCIOT:IOT_Data_PumpPressure", pumpPressure.ToJson().IndentJson());
                redisClient.Set($"Group:PumpPressure:{par.DeviceName}-{par.DeviceId}", pumpPressure);


                //用于通过ServerEvent给调用着返回消息
                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, 0, pumpPressure.ToJson().IndentJson());
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                Logger.Error(ex.StackTrace);
                Logger.Error(ex.Source);

                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, -1, ex.Message);
                }
            }
        }
Exemple #24
0
        public static void Get_XAGY_WII_WaterInjectingInstrument_Mock(ModbusRtuOverTcp client, RedisClient redisClient, string messageString)
        {
            var par       = messageString.FromJson <ControlRequest>();
            var waterWell = new IotDataWaterWell
            {
                AlarmCode = 0,
                AlarmMsg  = ""
            };

            try
            {
                waterWell.AlarmCode = 0;
                waterWell.AlarmMsg  = "Mock数据";

                waterWell.Mock     = par.UseMockData;
                waterWell.WellId   = par.DeviceId;
                waterWell.DateTime = DateTime.Now;
                redisClient.AddItemToList("YCIOT:IOT_Data_WaterWell", waterWell.ToJson().IndentJson());
                redisClient.Set($"Group:WaterWell:{par.DeviceName}-{par.DeviceId}", waterWell);

                //用于通过ServerEvent给调用着返回消息
                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, 0, waterWell.ToJson().IndentJson());
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                Logger.Error(ex.StackTrace);
                Logger.Error(ex.Source);

                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, -1, ex.Message);
                }
            }
        }
Exemple #25
0
        private void RegisterMove(string move, int stateAfterMove)
        {
            AlgebraicMove algMove = new AlgebraicMove();

            algMove.move = move;
            //TODO: If it's a game ending move
            //Turn to another player
            //Enter the move first
            redis.AddItemToList(movesKey, algMove.move);
            if (movesLoaded)
            {
                moves.Add(algMove);
            }
            UpdateTimeAfterMove();
            SetDataEntry(gameStateKey, stateAfterMove.ToString());

            GameState newGameState = (GameState)stateAfterMove;

            if (newGameState == GameState.Tie || newGameState == GameState.WhiteWin || newGameState == GameState.BlackWin)
            {
                FinishGame();
            }
        }
Exemple #26
0
        public static void Write(RedisClient redisClient, ControlRequest par, dynamic table, LogIotModbusPoll logIotModbusPoll, string method, string message)
        {
            string errorMsg = table.AlarmMsg;
            string msg      = $"{par.DeviceName}-{par.DeviceId}-{par.ModbusAddress}";

            table.AlarmCode = -1;
            table.AlarmMsg  = "数据异常";

            if (errorMsg == "正常")
            {
                errorMsg = table.AlarmMsg;
            }
            table.Mock = par.UseMockData;

            logIotModbusPoll.Type     = method;
            logIotModbusPoll.DateTime = DateTime.Now;
            logIotModbusPoll.State    = -1;
            logIotModbusPoll.Result   = $"{msg}:{message}[{errorMsg}]";

            logIotModbusPoll.Result.Info();

            redisClient.AddItemToList("YCIOT:Log_IOT_Modbus_Poll", logIotModbusPoll.ToJson().IndentJson());
        }
 public static void Show(string id, int minute)
 {
     #region
     //开启10个线程去抢购
     Console.WriteLine($"在{minute}分0秒正式开启秒杀!");
     var flag = true;
     while (flag)
     {
         if (DateTime.Now.Minute == minute)
         {
             flag = false;
             for (int i = 1; i <= 100; i++)
             {
                 string name = $"客户端{id}号:{i}";
                 Task.Run(() =>
                 {
                     using (RedisClient client = new RedisClient("127.0.0.1", 6379))
                     {
                         OrderInfo orderInfo = new OrderInfo()
                         {
                             ID        = name,
                             OrderTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
                         };
                         string listkey = "orderlist";
                         client.AddItemToList("orderlist", Newtonsoft.Json.JsonConvert.SerializeObject(orderInfo));
                         Console.WriteLine($"{name}下单成功");
                     }
                 });
                 Thread.Sleep(10);
             }
         }
         Thread.Sleep(10);
     }
     Console.ReadLine();
     #endregion
 }
        public void WriteToDatabase(List <SampleCode> codes)
        {
            const Int32 SampleDataReserve = 10000;

            try
            {
                using (RedisClient LocalClient = getClient(_RedisLocalPort))
                {
                    if (LocalClient == null)
                    {
                        return;
                    }
                    if (LocalClient != null)
                    {
                        LocalClient.Db = _CurrentDB;
                    }
                    Int32 len = LocalClient.LLen("SampleData");
                    if (SampleDataReserve < len + codes.Count)    //当本地缓存大于1万条记录时,减小数据库。将来可以做本地磁盘缓存。
                    {
                        LocalClient.LTrim("SampleData", len + codes.Count - SampleDataReserve, -1);
                    }
                    for (int i = 0; i < codes.Count; i++)
                    {
                        String value = Newtonsoft.Json.JsonConvert.SerializeObject(codes[i]);
                        LocalClient.AddItemToList("SampleData", value);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.Write("WriteToDatabase" + ex.Message);
            }
            finally
            {
            }
        }
Exemple #29
0
        public static async Task Get_XAGL_WM1000DLT_CurrentDiagram(ModbusRtuOverTcp client, RedisClient redisClient, string messageString)
        {
            var par = messageString.FromJson <ControlRequest>();

            try
            {
                var currentDiagram = new IotDataOilWellCurrentDiagram()
                {
                    NetworkNode = ClientInfo.ManyIpAddress,
                    AlarmCode   = 0,
                    AlarmMsg    = "正常"
                };

                var logIotModbusPoll = par.ConvertTo <LogIotModbusPoll>();

                logIotModbusPoll.State  = 0;
                logIotModbusPoll.Result = "ok";

                var modbusAddress = par.ModbusAddress;

                var jo1 = (JObject)JsonConvert.DeserializeObject(par.CommandParameter);
                currentDiagram.Displacement = Convert.ToDouble(jo1["0"].ToString());

                ClientInfo.CurrentModbusPoolAddress = modbusAddress;

                currentDiagram.D = new List <double>(); //位移
                currentDiagram.C = new List <double>(); //电流

                currentDiagram.DateTime = DateTime.Now;
                currentDiagram.WellId   = par.DeviceId;

                currentDiagram.DeviceTypeId = par.DeviceTypeId;
                currentDiagram.Mock         = false;

                var flag = true;
                lock (ClientInfo.locker)
                {
                    ClientInfo.RequestTime     = DateTime.Now;
                    ClientInfo.ExpectedType    = 0x03;
                    ClientInfo.ExpectedDataLen = 2;
                }
                var read = await client.ReadAsync($"s={par.ModbusAddress};x=3;4117", 1);

                if (read.IsSuccess)
                {
                    var value = client.ByteTransform.TransInt16(read.Content, 0);
                    if (value == 0)
                    {
                        currentDiagram.NetworkNode = ClientInfo.ManyIpAddress;
                        currentDiagram.AlarmCode   = 3;
                        currentDiagram.AlarmMsg    = "停井";

                        redisClient.AddItemToList("YCIOT:IOT_Data_OilWell_CurrentDiagram", currentDiagram.ToJson().IndentJson());
                        redisClient.Set($"Group:OilWell:{par.DeviceName}-{par.DeviceId}:CurrentDiagram", currentDiagram);
                        redisClient.Set($"Single:OilWell:CurrentDiagram:{par.DeviceName}-{par.DeviceId}", currentDiagram);

                        if (!par.UserName.IsNullOrEmpty())
                        {
                            ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, 0,
                                                             currentDiagram.ToJson().IndentJson());
                        }

                        return;
                    }
                }
                else
                {
                    flag = false;

                    currentDiagram.AlarmCode = -1;
                    currentDiagram.AlarmMsg  = "数据异常";

                    currentDiagram.Mock     = par.UseMockData;
                    logIotModbusPoll.State  = -1;
                    logIotModbusPoll.Result = "读取采样间隔数据异常!";

                    redisClient.AddItemToList("YCIOT:ERROR:Log_IOT_Modbus_Poll", logIotModbusPoll.ToJson().IndentJson());
                }


                if (flag)
                {
                    lock (ClientInfo.locker)
                    {
                        ClientInfo.RequestTime     = DateTime.Now;
                        ClientInfo.ExpectedType    = 0x03;
                        ClientInfo.ExpectedDataLen = 2;
                    }
                    read = await client.ReadAsync($"s={par.ModbusAddress};x=3;8097", 1);

                    if (read.IsSuccess)
                    {
                        var value = client.ByteTransform.TransInt16(read.Content, 0);
                        currentDiagram.Count    = 250;
                        currentDiagram.Interval = Math.Round(value * 0.01, 3);
                    }
                    else
                    {
                        flag = false;

                        currentDiagram.AlarmCode = -1;
                        currentDiagram.AlarmMsg  = "数据异常";

                        logIotModbusPoll.Type     = "Get_XAGL_WM1000DLT_CurrentDiagram";
                        logIotModbusPoll.DateTime = DateTime.Now;
                        currentDiagram.Mock       = par.UseMockData;
                        logIotModbusPoll.State    = -1;
                        logIotModbusPoll.Result   = "读取采样间隔数据异常!";

                        redisClient.AddItemToList("YCIOT:ERROR:Log_IOT_Modbus_Poll", logIotModbusPoll.ToJson().IndentJson());
                    }
                }

                ushort step = 100;
                if (flag && currentDiagram.Count <= 300 && currentDiagram.Count >= step)
                {
                    var regAddress = 37768;//读取电流数据
                    for (ushort i = 0; i < currentDiagram.Count && flag; i += step)
                    {
                        var itemCount = (i + step > currentDiagram.Count) ? (ushort)(currentDiagram.Count - i) : step;
                        if (isDebug)
                        {
                            Logger.Info($"{i}:{itemCount}:{(ushort)(regAddress + i)}");
                        }

                        lock (ClientInfo.locker)
                        {
                            ClientInfo.RequestTime     = DateTime.Now;
                            ClientInfo.ExpectedType    = 0x03;
                            ClientInfo.ExpectedDataLen = itemCount * 2;
                        }
                        read = await client.ReadAsync($"s={par.ModbusAddress};x=3;{(regAddress + i)}", itemCount);

                        if (read.IsSuccess)
                        {
                            for (var j = 0; j < itemCount; j++)
                            {
                                var value = client.ByteTransform.TransInt16(read.Content, j++);
                                if (value != 0)
                                {
                                    var C = Math.Round(((value - 800) * 5 / 3200.0) * 15, 2);
                                    currentDiagram.C.Add(C);
                                }
                                else
                                {
                                    currentDiagram.C.Add(value);
                                }
                            }
                        }
                        else
                        {
                            flag = false;

                            currentDiagram.AlarmCode = -1;
                            currentDiagram.AlarmMsg  = "数据异常";

                            currentDiagram.Mock       = par.UseMockData;
                            logIotModbusPoll.Type     = "Get_XAGL_WM1000DLT_CurrentDiagram";
                            logIotModbusPoll.DateTime = DateTime.Now;
                            logIotModbusPoll.State    = -1;
                            logIotModbusPoll.Result   = "从 " + (regAddress + i).ToString() + " 个开始,读取 " + itemCount.ToString() + " 个电流图电流数据异常!";

                            redisClient.AddItemToList("YCIOT:ERROR:Log_IOT_Modbus_Poll", logIotModbusPoll.ToJson().IndentJson());
                        }

                        Thread.Sleep(100);
                    }

                    currentDiagram.MaxCurrent = currentDiagram.C.Max();                    //最大电流
                    currentDiagram.MinCurrent = currentDiagram.C.Min();                    //最小电流
                    currentDiagram.AvgCurrent = Math.Round(currentDiagram.C.Average(), 2); //平均电流
                }
                else
                {
                    flag = false;
                }

                currentDiagram.NetworkNode = ClientInfo.ManyIpAddress;

                if (flag == true || par.UseMockData)
                {
                    currentDiagram.Mock = par.UseMockData;

                    if (currentDiagram.Count != null)
                    {
                        currentDiagram.D = DisplacementUtils.FitDisplacement((ushort)currentDiagram.Count,
                                                                             (double)currentDiagram.Displacement);
                    }
                    redisClient.AddItemToList("YCIOT:IOT_Data_OilWell_CurrentDiagram", currentDiagram.ToJson().IndentJson());
                    redisClient.Set($"Group:OilWell:{par.DeviceName}-{par.DeviceId}:CurrentDiagram", currentDiagram);
                    redisClient.Set($"Single:OilWell:CurrentDiagram:{par.DeviceName}-{par.DeviceId}", currentDiagram);
                }

                //用于通过ServerEvent给调用着返回消息
                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, flag ? 0 : -2, currentDiagram.ToJson().IndentJson());
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.Message);
                Logger.Error(ex.StackTrace);
                Logger.Error(ex.Source);

                //用于通过ServerEvent给调用着返回消息
                if (!par.UserName.IsNullOrEmpty())
                {
                    ServerEventHelper.SendSseMessage(par.UserName, par.SessionId, -1, ex.Message);
                }
            }
        }
Exemple #30
0
        static void Main(string[] args)
        {
            using (IRedisClient client = new RedisClient("127.0.0.1", 6379, null, 0))
            {
                //删除当前数据库中的所有Key
                client.FlushDb();
                string hashId = "stu";
                Dictionary <string, string> dic = new Dictionary <string, string>();
                dic.Add("name", "Micahel Shen");
                dic.Add("age", "18");
                dic.Add("address", "anyue");
                #region 添加、获取字符串
                //新增Key,默认是做了序列化存储
                client.Set <string>("name", "clay");
                //读取key 一般不建议这个方法
                var value0 = client.GetValue("name");
                Console.WriteLine(JsonConvert.DeserializeObject <string>(value0));
                //读取二 推荐试用,帮我们作了反序列
                var value1 = client.Get <string>("name");
                Console.WriteLine(value1);
                Dictionary <string, string> disc = new Dictionary <string, string>();
                disc.Add("id", "001");
                disc.Add("name", "michaelshen");
                disc.Add("address", "anyuexian");
                #endregion
                #region 批量的写
                //批量的写
                client.SetAll(disc);

                var list = client.GetAll <string>(new string[] { "id", "name" });
                foreach (var item in list)
                {
                    Console.WriteLine(item);
                }
                #endregion
                #region 设置过期时间
                client.FlushDb();
                client.Set <string>("name", "Michael Shen", TimeSpan.FromSeconds(10));
                client.Set <string>("key", "Shen", DateTime.Now.AddSeconds(10));
                //如果读不到key则返回一个"";
                #endregion
                #region 追加字符串
                client.FlushDb();
                //client.Set("name", "Michael Shen");
                client.AppendToValue("name", "Michael Shen");
                client.AppendToValue("name", " is SPY");
                Console.WriteLine(client.Get <string>("name"));
                #endregion
                #region 自增自减
                client.FlushDb();
                var a = client.Increment("count", 1);
                client.Increment("count", 100);
                //自减
                client.Decrement("count", 1);
                var b = client.Decrement("count", 5);
                Console.WriteLine(client.Get <int>("count"));
                #endregion
                #region Add和Set
                //Add会先判断数据库中是否存在对应的key,如果存在,再Add的话,会失败,并返回false,否则成功并返回true
                client.FlushDb();
                Console.WriteLine(client.Add <string>("name", "michael Shen")); //true
                Console.WriteLine(client.Add <string>("name", "michael Shen")); //false
                Console.WriteLine(client.Add <string>("name", "Shen"));         //false
                //Set
                Console.WriteLine(client.Add <int>("age", 18));                 //true
                Console.WriteLine(client.Add <int>("age", 19));                 //true
                Console.WriteLine(client.Add <int>("age", 20));                 //true
                #endregion
                #region 判断Redis中是否包含某一个Key
                Console.WriteLine(client.ContainsKey("name"));  //true
                Console.WriteLine(client.ContainsKey("NoKey")); //true
                #endregion
                #region 获取类型
                client.FlushDb();
                client.Set <string>("name", "MichaelShen");
                var type = client.GetEntryType("name");
                Console.WriteLine(type);                         //String
                client.AddItemToList("list1", "asdga");
                Console.WriteLine(client.GetEntryType("list1")); //List
                #endregion
                #region Hash
                client.FlushDb();
                Console.WriteLine("Hash");
                client.SetEntryInHash(hashId, "name", "Michael Shen");
                client.SetEntryInHash(hashId, "age", "18");
                var value = client.GetValueFromHash(hashId, "name");
                Console.WriteLine(value);
                //批量操作
                Dictionary <string, string> stu1 = new Dictionary <string, string>();
                stu1.Add("name", "Michael Shen1");
                stu1.Add("Id", "2017060528");
                stu1.Add("age", "19");
                client.SetRangeInHash(hashId, stu1);
                var result = client.GetAllEntriesFromHash(hashId);
                foreach (var item in result)
                {
                    Console.WriteLine(item.Key + ":" + item.Value);
                }
                //如果hash集合中存在对应的key,则新增失败,否则新增成功
                var res  = client.SetEntryInHashIfNotExists(hashId, "Nkey", "new value"); //true
                var res1 = client.SetEntryInHashIfNotExists(hashId, "name", "new value"); //false
                Console.WriteLine(res);
                Console.WriteLine(res1);
                #endregion
                #region 存用户信息
                client.FlushDb();
                Console.Clear();
                //用String去存储用户信息对象
                //用户信息,首先把对象做一个json序列化,然后存储再Redis的string里,
                //但是如果需要修改这个对象中的其中一个属性值的时候,先把这个对象json字符串读取出来反序列化,
                //然后修改属性值,修改完后再继续序列化再存储进去


                //用hash存储用户信息对象
                client.StoreAsHash <User>(new User {
                    ID = "001", Age = "22", Name = "MichaelShen"
                });
                Console.WriteLine(client.GetFromHash <User>("001").ToString());
                #endregion
                #region Hash里面Key总数
                Console.Clear();
                client.FlushDb();
                client.SetRangeInHash(hashId, dic);
                Console.WriteLine(client.GetHashCount(hashId));
                #endregion
                #region 获取所有的Keys和Values
                Console.Clear();
                client.FlushDb();
                client.SetRangeInHash(hashId, dic);
                var keys   = client.GetHashKeys(hashId);
                var values = client.GetHashValues(hashId);
                foreach (var item in keys)
                {
                    Console.WriteLine(item);
                }
                foreach (var item in values)
                {
                    Console.WriteLine(item);
                }
                #endregion
                #region  除Hash里的key
                //接上
                Console.WriteLine(client.RemoveEntryFromHash(hashId, "age"));
                foreach (var item in client.GetHashKeys(hashId))
                {
                    Console.WriteLine(item);
                }
                client.SetEntryInHash(hashId, "age", "22");
                #endregion
                #region 判断Hash里是否包含某个Key项
                Console.Clear();
                Console.WriteLine(client.HashContainsEntry(hashId, "name"));
                Console.WriteLine(client.HashContainsEntry(hashId, "Nokey"));
                #endregion
                #region 给Hash里的数字自增
                client.SetEntryInHash(hashId, "count", "1");
                client.IncrementValueInHash(hashId, "count", 1);
                Console.WriteLine(client.GetValueFromHash(hashId, "count"));
                #endregion
                #region List
                client.FlushDb();
                Console.Clear();
                {
                    var libai = new User
                    {
                        ID   = "001",
                        Name = "李白",
                        Age  = "22"
                    };
                    var guanyu = new User
                    {
                        Age  = "23",
                        Name = "关于",
                        ID   = "002"
                    };
                    client.AddItemToList("list0", JsonConvert.SerializeObject(libai));
                    client.AddItemToList("list0", JsonConvert.SerializeObject(guanyu));
                    #region 从前面、后面插入
                    //从前面插入
                    client.PrependItemToList("list0", JsonConvert.SerializeObject(new User {
                        ID = "003", Age = "25", Name = "花木兰"
                    }));
                    //从后面插入
                    client.PushItemToList("list0", JsonConvert.SerializeObject(new User {
                        ID = "004", Age = "26", Name = "鲁班"
                    }));
                    #endregion
                    #region List设置过期时间
                    client.ExpireEntryAt("list0", DateTime.Now.AddSeconds(10));
                    #endregion
                    #region 批量操作
                    //批量增加
                    client.AddRangeToList("list1", new List <string> {
                        "fdasf", "sadfa", "fdsafsagdfs", "1354213"
                    });
                    var results = client.GetRangeFromList("list1", 0, 2);
                    foreach (var item in results)
                    {
                        Console.WriteLine(item);
                    }
                    #endregion
                    #region 当数据结构操作
                    //当栈来操作(后进先出)
                    client.AddItemToList("listNum", "1");
                    client.AddItemToList("listNum", "2");
                    client.AddItemToList("listNum", "3");
                    client.AddItemToList("listNum", "4");
                    //从尾部删除并返回对应的值
                    Console.WriteLine(client.RemoveEndFromList("listNum")); //4
                    Console.WriteLine(client.RemoveEndFromList("listNum")); //3
                    Console.WriteLine(client.RemoveEndFromList("listNum")); //2
                    Console.WriteLine(client.RemoveEndFromList("listNum")); //1
                    //当队列来操作(先进先出)
                    client.AddItemToList("listNum", "1");
                    client.AddItemToList("listNum", "2");
                    client.AddItemToList("listNum", "3");
                    client.AddItemToList("listNum", "4");
                    //从头部删除并返回对应的值
                    Console.WriteLine(client.RemoveStartFromList("listNum"));
                    Console.WriteLine(client.RemoveStartFromList("listNum"));
                    Console.WriteLine(client.RemoveStartFromList("listNum"));
                    Console.WriteLine(client.RemoveStartFromList("listNum"));

                    //Pop和Push(栈数据结构的操作-先进后出)
                    client.PushItemToList("listStack", "1");
                    client.PushItemToList("listStack", "2");
                    client.PushItemToList("listStack", "3");
                    client.PushItemToList("listStack", "4");
                    Console.WriteLine(client.PopItemFromList("listStack"));
                    Console.WriteLine(client.PopItemFromList("listStack"));
                    Console.WriteLine(client.PopItemFromList("listStack"));
                    Console.WriteLine(client.PopItemFromList("listStack"));
                    //从一个List中pop出来添加到另一个List的头部中
                    client.PushItemToList("fromList", "1");
                    client.PushItemToList("fromList", "2");
                    client.PushItemToList("fromList", "3");
                    client.PushItemToList("fromList", "4");
                    Console.WriteLine(client.PopAndPushItemBetweenLists("fromList", "toList"));
                    Console.WriteLine(client.PopAndPushItemBetweenLists("fromList", "toList"));
                    Console.WriteLine(client.PopAndPushItemBetweenLists("fromList", "toList"));
                    #endregion
                    #region 其他
                    //获取key的过期时间
                    Console.WriteLine(client.GetTimeToLive("fromList"));
                    client.ExpireEntryAt("fromList", DateTime.Now.AddSeconds(60));
                    Console.WriteLine(client.GetTimeToLive("fromList"));
                    #endregion
                }
                #endregion
            }
        }