Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF应用程序中使用StackExchange.Redis的正确方法_C#_Redis_Stackexchange.redis - Fatal编程技术网

C# 在WPF应用程序中使用StackExchange.Redis的正确方法

C# 在WPF应用程序中使用StackExchange.Redis的正确方法,c#,redis,stackexchange.redis,C#,Redis,Stackexchange.redis,我已经在我的应用程序中实现了Stackexchange.Redis,以便从Redis数据库列表中获取数据。 登录应用程序(WPF)创建一个列表,并将另一个模块(C++)获取的数据推送到创建redis db的服务器上。服务器模块将响应推送到特定于用户的列表,WPF模块在该列表中每隔10毫秒通过轮询读取数据 我创建了以下方法来执行这些任务 建造师 连接Redis 从列表中获取数据 创建连接后,我每隔10毫秒启动一个System.timer调用FetchListToProcess()方法,该方法检查列

我已经在我的应用程序中实现了Stackexchange.Redis,以便从Redis数据库列表中获取数据。 登录应用程序(WPF)创建一个列表,并将另一个模块(C++)获取的数据推送到创建redis db的服务器上。服务器模块将响应推送到特定于用户的列表,WPF模块在该列表中每隔10毫秒通过轮询读取数据

我创建了以下方法来执行这些任务

  • 建造师
  • 连接Redis
  • 从列表中获取数据
  • 创建连接后,我每隔10毫秒启动一个System.timer调用FetchListToProcess()方法,该方法检查列表中是否存在任何数据,如果存在,则会相应地进行提取和处理

    我遇到应用程序随机记录超时异常的问题:

    Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 2, qu: 0, qs: 40, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=1,Free=999,Min=8,Max=1000), WORKER: (Busy=20,Free=32747,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:26.93 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    03:29:27.43 :: Method Name :: Redis --> RedisTimeoutException
    03:29:27.43 :: Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 3, qu: 0, qs: 41, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=0,Free=1000,Min=8,Max=1000), WORKER: (Busy=21,Free=32746,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:27.43 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    03:29:28.94 :: Method Name :: Redis --> RedisTimeoutException
    03:29:28.94 :: Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 1, qu: 0, qs: 44, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=0,Free=1000,Min=8,Max=1000), WORKER: (Busy=22,Free=32745,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:28.94 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    03:29:29.36 :: Method Name :: Redis --> RedisTimeoutException
    03:29:29.36 :: Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 2, qu: 0, qs: 45, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=0,Free=1000,Min=8,Max=1000), WORKER: (Busy=22,Free=32745,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:29.36 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    03:29:29.42 :: Method Name :: Redis --> RedisTimeoutException
    03:29:29.42 :: Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 3, qu: 0, qs: 46, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=1,Free=999,Min=8,Max=1000), WORKER: (Busy=22,Free=32745,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:29.42 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    
    对于insert-into-list方法也是如此

    03:29:26.42 :: Method Name :: RedisConnection --> InsertIntoList
    03:29:26.42 :: Error Messg :: Timeout performing RPUSH (5000ms), next: LLEN ROUTER_IEORALG9, inst: 1, qu: 0, qs: 35, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=1,Free=999,Min=8,Max=1000), WORKER: (Busy=18,Free=32749,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:26.42 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListRightPush(RedisKey key, RedisValue value, When when, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 1004
       at BL.RedisConnection.InsertIntoList(Byte[] messageToSend, Boolean isLoginRequest, String loginID)
    
    此异常会停止提取数据,对于不同的用户,它会变得非常随机。。像一些人一样,它持续到2-3分钟,而另一些人可能在30-40秒后停止。 以前,所有连接的用户在同一时间同时发生这种情况,但现在发生在随机时间,用户数量随机。大约有5-10个应用程序在这些redis端口连接。 我们使用单个列表插入服务器应用程序读取的数据&每个连接的用户使用单独的列表获取数据

    我试着在异常详细信息下阅读并实现链接中提到的选项,但没有成功。 请说明我做错了什么? 是实施还是其他方面出了问题

    问候,

    霍尼亚舒

    @marc Gravell。。你能建议我看的第一件事是:
    slowlog
    在服务器上;这是否真的是报告服务器阻塞?
           private  void FetchListToProcess()
            {
                try
                {                
                    IDatabase database = connection.GetDatabase();                 
                    long length = database.ListLength(ConfigurationService.ListToInsertRequest + "_" + LoginID);
                    if (length > 0)
                    {
                        RedisValue rv = database.ListLeftPop(ConfigurationService.ListToInsertRequest+"_"+ LoginID, CommandFlags.None);
                        if (rv.HasValue)
                        {
                            database.ListRemove(LoginID, rv);
                            byte[] userObject = (byte[])rv;
                            CommonOM.MessageHeader HeaderObj = CommonBL.ByteArrayToStructure<CommonOM.MessageHeader>(userObject);
                            int MessageType = HeaderObj.messageCode;
                            if (MessageType == Convert.ToInt32(TRANSACTION_REQUEST_CODE.HEART_BEAT))
                            {   
                               delRecieveReadyRedisHearbeat delHeartbeatReciever = new delRecieveReadyRedisHearbeat(_heartbeatHelper.OnRecieveHeartbeat);
                               delHeartbeatReciever.BeginInvoke(MessageType, userObject, null, null);
                               
                            }
                            else 
                            {    
                               delRecieveReadyRedisHearbeat delHeartbeatReciever = new delRecieveReadyRedisHearbeat(_heartbeatHelper.OnRecieveHeartbeat);
                               delHeartbeatReciever.BeginInvoke(MessageType, userObject, null, null);
                              
                            }
                            else
                            {
                                delRecieveReadyRedisMessages delReady = new delRecieveReadyRedisMessages(_connectionHelper.OnReceive);
                                delReady.BeginInvoke(MessageType, userObject, null, null);
                            }                      
                        }
                    }
                }
                catch (StackExchange.Redis.RedisTimeoutException ex)
                {
                    
                }
                catch (Exception ex)
                {
                   
                }
            }
    
       public void InsertIntoList(byte[] messageToSend,bool isLoginRequest,string loginID)
            {
                try
                {
                    IDatabase database = connection.GetDatabase();
                    database.ListRightPush(ConfigurationService.ListToInsertRequest, messageToSend);
                }
                catch (RedisTimeoutException ex)
                {
                }
                catch (Exception ex)
                {
                }
            }
    
    Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 2, qu: 0, qs: 40, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=1,Free=999,Min=8,Max=1000), WORKER: (Busy=20,Free=32747,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:26.93 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    03:29:27.43 :: Method Name :: Redis --> RedisTimeoutException
    03:29:27.43 :: Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 3, qu: 0, qs: 41, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=0,Free=1000,Min=8,Max=1000), WORKER: (Busy=21,Free=32746,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:27.43 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    03:29:28.94 :: Method Name :: Redis --> RedisTimeoutException
    03:29:28.94 :: Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 1, qu: 0, qs: 44, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=0,Free=1000,Min=8,Max=1000), WORKER: (Busy=22,Free=32745,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:28.94 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    03:29:29.36 :: Method Name :: Redis --> RedisTimeoutException
    03:29:29.36 :: Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 2, qu: 0, qs: 45, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=0,Free=1000,Min=8,Max=1000), WORKER: (Busy=22,Free=32745,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:29.36 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    03:29:29.42 :: Method Name :: Redis --> RedisTimeoutException
    03:29:29.42 :: Error Messg :: Timeout performing LLEN (5000ms), next: LLEN ROUTER_IEORALG9, inst: 3, qu: 0, qs: 46, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=1,Free=999,Min=8,Max=1000), WORKER: (Busy=22,Free=32745,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:29.42 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListLength(RedisKey key, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 943
       at BL.RedisConnection.FetchListToProcess()
    
    03:29:26.42 :: Method Name :: RedisConnection --> InsertIntoList
    03:29:26.42 :: Error Messg :: Timeout performing RPUSH (5000ms), next: LLEN ROUTER_IEORALG9, inst: 1, qu: 0, qs: 35, aw: False, rs: ReadAsync, ws: Idle, in: 0, in-pipe: 0, out-pipe: 0, serverEndpoint: 192.168.37.182:8081, mgr: 10 of 10 available, clientName: IETRD-15628-2, IOCP: (Busy=1,Free=999,Min=8,Max=1000), WORKER: (Busy=18,Free=32749,Min=8,Max=32767), v: 2.0.601.3402 (Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)
    03:29:26.42 :: Stack Trace ::    at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\ConnectionMultiplexer.cs:line 2239
       at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisBase.cs:line 54
       at StackExchange.Redis.RedisDatabase.ListRightPush(RedisKey key, RedisValue value, When when, CommandFlags flags) in C:\projects\stackexchange-redis\src\StackExchange.Redis\RedisDatabase.cs:line 1004
       at BL.RedisConnection.InsertIntoList(Byte[] messageToSend, Boolean isLoginRequest, String loginID)