StackExchange.Redis.dll 连接超时的问题?

ayun00 2017-01-11 07:38:16
我使用se 来连接 redis , 开始很正常, 运行一段时间后 就开始 报System.TimeoutException 错误了,

我测试代码如下

public void main()
{
isrun = true;
Thread[] tlist = new Thread[1000];
for (int i = 0; i < 1000; i++)
{
tlist[i] = new Thread(yalitest);
tlist[i].IsBackground = true;
tlist[i].Start();
}
}
private void yalitest()
{
while (isrun)
{
//压测行为
RedisUtility.GetInstance().HashSet<DateTime>(TPS.RedisRepository.RedisKeyPre.DeviceStatus + "0", "LastUpdateTime", DateTime.Now);
RedisUtility.GetInstance().HashGet<DateTime>(TPS.RedisRepository.RedisKeyPre.DeviceStatus + "0", "LastUpdateTime");
Thread.Sleep(500);
}
}


public static RedisUtility GetInstance(int expirationTime = -1)
{
if (instance == null)
{
lock (_lock)
{
if (instance == null)
{
instance = new RedisUtility(configuration);
if (expirationTime > 0)
{
RedisUtility.expirationTime = expirationTime;
}
}
}
}
return instance;
}
private RedisUtility(string configuration)
{
//这个方式支持集群 直接ConnectionMultiplexer.Connect(configuration)的不支持2种redis集群 codis 和 Twemproxy
string[] EndPoint = configuration.Split(',').Where(a => a.Contains(".") && a.Contains(":")).Select(a => a.Trim()).ToArray();
var options = new ConfigurationOptions
{

Proxy = Proxy.Twemproxy
};
foreach (string item in EndPoint)
{
try
{
options.EndPoints.Add(item);
}
catch (Exception oe)
{
string err = oe.Message + oe.StackTrace;
}
}
redis = ConnectionMultiplexer.Connect(options);
}
public T HashGet<T>(string key, string field, int databaseNumber = -1, object asyncState = null)
{
try
{
IDatabase db = redis.GetDatabase(databaseNumber, asyncState);
return jil.Deserialize<T>(db.HashGet(key, field));
}
catch
{
if (typeof(T).IsPrimitive)
{
throw new ArgumentNullException("相关内容不存在"); // throw
}
return default(T);
}
}
...全文
880 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerryzhang5666 2017-05-17
  • 打赏
  • 举报
回复
遇到过类似问题,说一下我的解决方式不知道是否有用,我判断这个问题跟网络延迟有关系,比如你的网络延迟超过了你定义的运行周期时间500毫秒,那么就会出现超时问题,你可以加一个标志,从Redis相关功能开始处理到处理结束期间,锁定标志,线程暂时不调用,待下一次周期再根据锁定标志是否放开来调用
ayun00 2017-03-01
  • 打赏
  • 举报
回复
引用 6 楼 shingoscar 的回复:
[quote=引用 5 楼 ayun00 的回复:] [quote=引用 4 楼 shingoscar 的回复:] 是偶尔timeout的话可以理解为哪里卡住了,再请求一遍即可
不是偶尔 ,是出现1次timeout后, 就累积的原来越多 ,直到内存和连接数都吃完[/quote] 这是出错了内存没释放吧[/quote] 不知道啊, 不知道要怎么解决
Poopaye 2017-01-27
  • 打赏
  • 举报
回复
引用 5 楼 ayun00 的回复:
[quote=引用 4 楼 shingoscar 的回复:] 是偶尔timeout的话可以理解为哪里卡住了,再请求一遍即可
不是偶尔 ,是出现1次timeout后, 就累积的原来越多 ,直到内存和连接数都吃完[/quote] 这是出错了内存没释放吧
ayun00 2017-01-27
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
是偶尔timeout的话可以理解为哪里卡住了,再请求一遍即可
不是偶尔 ,是出现1次timeout后, 就累积的原来越多 ,直到内存和连接数都吃完
Poopaye 2017-01-24
  • 打赏
  • 举报
回复
是偶尔timeout的话可以理解为哪里卡住了,再请求一遍即可
ayun00 2017-01-24
  • 打赏
  • 举报
回复
引用 2 楼 lijun_xiao2009 的回复:
我有一个redis的实例,需要联系我286455502
QQ?
lijun_xiao2009 2017-01-16
  • 打赏
  • 举报
回复
我有一个redis的实例,需要联系我286455502
ayun00 2017-01-16
  • 打赏
  • 举报
回复
有人吗?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧