超时执行EXISTS [keyname],inst:2,mgr:ExecuteSelect,queue:0,qu = 0,qs = 0,qc = 0,wr = 0/0,in = 0/0

时间:2015-05-17 05:37:32

标签: c# multithreading exists stackexchange.redis timeoutexception

我在C#Windows应用程序中使用StackExchange.Redis版本1.0.0.0。此应用程序是多线程,我们在Redis缓存中保存一些值。 当我需要键的值时,首先我通过EXISTS命令检查该键的存在。

有时会发生异常:

  

超时执行EXISTS SpeedLimit_GF__VU_3,inst:2,mgr:   ExecuteSelect,队列:0,qu = 0,qs = 0,qc = 0,wr = 0/0,in = 0/0,   IOCP:(忙碌= 0,免费= 1000,最小值= 8,最大值= 1000),   工人:(忙碌= 1,免费= 1022,最小值= 8,最大值= 1023)          在StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T](消息   消息,ResultProcessor1处理器,ServerEndPoint服务器)          在StackExchange.Redis.RedisBase.ExecuteSync [T](消息消息,ResultProcessor1处理器,ServerEndPoint服务器)          在StackExchange.Redis.RedisDatabase.KeyExists(RedisKey键,CommandFlags标志)       。 。

缓存服务器和应用服务器是相同的。可能是什么原因以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

该错误消息告诉我客户端当时没有做任何有趣的事情,所以问题就变成了:服务器做了什么? slowlog get中有什么与此时相关的东西吗?服务器日志有什么问题吗?特别是,我的第一个想法是:

  1. 此时服务器是否持久存在(aof rewrite或rdb)?
  2. 是否存在阻止服务器的长时间运行操作(例如keys *,您不应该使用它)
  3. 是否与主/从建立复制?
  4. 有网络短信吗?