ASP.NET Core 站点运行于 Linux 服务器,运行时在 StackExchange.Redis 中出现如下的错误:
StackExchange.Redis.RedisConnectionException: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. Timeout at StackExchange.Redis.ConnectionMultiplexer.ConnectImpl(Func`1 multiplexerFactory, TextWriter log) at Microsoft.Extensions.Caching.Redis.RedisCache.Connect() at Microsoft.Extensions.Caching.Redis.RedisCache.GetAndRefresh(String key, Boolean getData)
下面是 ConnectImpl() 方法的实现代码:
private static ConnectionMultiplexer ConnectImpl(Func<ConnectionMultiplexer> multiplexerFactory, TextWriter log) { IDisposable killMe = null; try { var muxer = multiplexerFactory(); killMe = muxer; // note that task has timeouts internally, so it might take *just over* the regular timeout var task = muxer.ReconfigureAsync(true, false, log, null, "connect"); if (!task.Wait(muxer.SyncConnectTimeout(true))) { task.ObserveErrors(); if (muxer.RawConfig.AbortOnConnectFail) { throw ExceptionFactory.UnableToConnect("Timeout"); } } if (!task.Result) throw ExceptionFactory.UnableToConnect(muxer.failureMessage); killMe = null; return muxer; } finally { if (killMe != null) try { killMe.Dispose(); } catch { } } }
可嘉啊,搞了这么多天了~~
看来你准备的这系统比较大,直接就上redis。
一定要这么复杂?我是简单调用,目前没看到有问题,只是觉得比.NET里面的内存缓存慢些
慢的原因是使用错了吧,你是不是每次都创建一个 ConnectionMultiplexer
官方的使用方法是,用一个静态单例对象就行了,但是并发有很多问题,如楼主说的 Timeout
@nicye: 嗯,改成共用了,还是慢,高频使用的还是要放内存好点
我踩过这个坑,解决方法:放弃
用这个吧 https://github.com/2881099/csredis
这个问题解决了么,刚使用redis 碰见了相同的问题?dudu
当时没找到问题的真正原因,后来好了
@dudu: 什么原因能说说吗?正准备用这个组件
我也遇到了这个问题,该怎么解决?
.net core部署到阿里云k8s容器中使用StackExchange.Redis 遇到同样的问题,该如何解决
redis 服务器是自己搭建的还是用的阿里云的?
@dudu: 他们把密码复制错了,没有问题,谢谢啊
先mark再说