首页新闻找找看学习计划

asp.net core项目中使用阿里云redis存储session的问题

1
悬赏园豆:50 [待解决问题]

日志中出现很多下面的错误,请问如何解决?

2017-05-15 16:22:46.443 +08:00 [Error] Session cache read exception, Key:"39d205cd-12ff-79fb-2e92-0930de72d351"
System.TimeoutException: Timeout performing EVAL, inst: 1, queue: 2, qu: 0, qs: 2, qc: 0, wr: 0, wq: 0, in: 7, ar: 0, clientName:  (Please take a look at this article for some common client-side issues that can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md)
   at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server)
   at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server)
   at StackExchange.Redis.RedisDatabase.ScriptEvaluate(String script, RedisKey[] keys, RedisValue[] values, CommandFlags flags)
   at Microsoft.Extensions.Caching.Redis.RedisExtensions.HashMemberGet(IDatabase cache, String key, String[] members)
   at Microsoft.Extensions.Caching.Redis.RedisCache.GetAndRefresh(String key, Boolean getData)
   at Microsoft.AspNetCore.Session.DistributedSession.Load()
dudu的主页 dudu | 高人七级 | 园豆:39088
提问于:2017-05-15 16:43
< >
分享
所有回答(5)
1

执行eval超时,怀疑是网络哪儿不对劲哇。

RedisCache用于Session的源码:https://github.com/aspnet/Caching/blob/dev/src/Microsoft.Extensions.Caching.Redis/RedisCache.cs

 

实际是调用的:https://github.com/StackExchange/StackExchange.Redis 。

可以尝试用这个库,直接连接阿里云redis试试~

幻天芒 | 园豆:36594 (高人七级) | 2017-05-15 17:07
1

通过将syncTimeout修改为更大的值,可以减少这个错误的产生,默认值是 1000(1秒),参考 StackExchange.Redis Configuration Options

如果修改为2秒,在连接字符串中添加  ,syncTimeout=2000 。

dudu | 园豆:39088 (高人七级) | 2017-05-15 18:10

 实际上感觉应该还是网络不稳定问题。否则一般长连接,基本不会出现这种错误吧。

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2017-05-15 18:31

@幻天芒: 这个网络不稳定的问题不在我们的可控范围

支持(0) 反对(0) dudu | 园豆:39088 (高人七级) | 2017-05-15 21:59

@dudu: 如果延时这么高,那用redis的效果就不是太明显了。现在的分布式部署方式,可以很灵活嘛。自建一个稳定的redis集群也是可以的。

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2017-05-15 22:59
0

@dudu 这么解决的额

花儿笑弯了腰 | 园豆:264 (菜鸟二级) | 2017-07-17 14:18
0

线程数太高,修改mine.config

https://stackexchange.github.io/StackExchange.Redis/Timeouts

(博主最后跳过这了?)不用了?

  • In ASP.NET, use the “minIoThreads” configuration setting under the <processModel> configuration element in machine.config. According to Microsoft, you can’t change this value per site by editing your web.config (even when you could do it in the past), so the value that you choose here is the value that all your .NET sites will use. Please note that you don’t need to add every property if you put autoConfig in false, just putting autoConfig=”false” and overriding the value is enough: ```xml

```

Important Note: the value specified in this configuration element is a per-core setting. For example, if you have a 4 core machine and want your minIOThreads setting to be 200 at runtime, you would use <processModel minIoThreads="50"/>.

【秦时明月】 | 园豆:803 (小虾三级) | 2017-11-29 09:36

后来莫名其妙地好了

支持(0) 反对(0) dudu | 园豆:39088 (高人七级) | 2017-11-29 09:49

@dudu: 之前做并发测试的时候,发现了这问题,不过感觉StackExchange.Redi的这种修改方案很丑陋.

还得该配置.

支持(0) 反对(0) 【秦时明月】 | 园豆:803 (小虾三级) | 2017-11-29 09:50

@dudu: 博主,请教一下,目前博客园的服务器用了几台什么配置,应对多大并发,

我们这边选择服务器

支持(0) 反对(0) 【秦时明月】 | 园豆:803 (小虾三级) | 2017-11-29 10:53

@[秦时明月]: 我们用的是阿里云,4核8G的独享服务器单台目前可以支撑1000左右的QPS

支持(0) 反对(0) dudu | 园豆:39088 (高人七级) | 2017-11-29 12:03

@dudu: 带宽多少?

支持(0) 反对(0) 【秦时明月】 | 园豆:803 (小虾三级) | 2017-11-29 14:40

@[秦时明月]: 我们用的是按流量付费的负载均衡

支持(0) 反对(0) dudu | 园豆:39088 (高人七级) | 2017-11-29 14:45
0

我们使用的netcore2.2也遇到了这个问题,临时加了 syncTimeout,不知道有没有更好的办法~~

菜菜菜鸟飞不动 | 园豆:81 (初学一级) | 2020-02-21 23:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册