如何解决为什么DistributedCache SessionHandler抛出连接问题?
我有一个.net核心应用程序,在蔚蓝的VM中运行,在那里我使用Redis作为DistributedCache的实现。这样,我们将用户会话存储在Redis中,并且可以在Web场中共享。我们仅将Redis用于存储会话。我们将Azure Redis缓存用于普通实例。 VM和Redis都在同一区域。
添加启动项:
services.AddStackExchangeRedisCache(options => {
options.Configuration = configuration["RedisCache:ConnectionString"];
});
在网络应用中,redis关闭连接时出现间歇性问题。所有对Redis的调用都通过调用如下的会话Async方法来管理。
public static async Task<T> Get<T>(this ISession session,string key) {
if (!session.IsAvailable)
await session.LoadAsync();
var value = session.GetString(key);
return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
}
我们看到的错误是:
StackExchange.Redis.RedisConnectionException: No connection is available to service this operation: EVAL; An existing connection was forcibly closed by the remote host.; IOCP: (Busy=0,Free=1000,Min=2,Max=1000),WORKER: (Busy=3,Free=32764,Min=512,Max=32767),Local-CPU: n/a
---> StackExchange.Redis.RedisConnectionException: SocketFailure on myredis.redis.cache.windows.net:6380/Interactive,Idle/Faulted,last: EVAL,origin: ReadFromPipe,outstanding: 1,last-read: 34s ago,last-write: 0s ago,keep-alive: 60s,state: ConnectedEstablished,mgr: 9 of 10 available,in: 0,last-heartbeat: 0s ago,last-mbeat: 0s ago,global: 0s ago,v: 2.0.593.37019
---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host..
和
StackExchange.Redis.RedisConnectionException: SocketFailure on myredis.redis.cache.windows.net:6380/Interactive,last: EXPIRE,last-read: 0s ago,v: 2.0.593.37019
---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host..
我们在超时期间没有出现流量高峰,并且Redis实例没有任何繁重的负载。
我不知道如何进一步解决此问题。有想法吗?
解决方法
由于空闲时间太长,Redis服务器可能关闭了连接。 在您的Azure缓存控件中,您可以找到Redis服务器的配置,查看是否可以找到超时设置。 如果您可以通过命令行发出命令,也可以发出此命令
CONFIG get timeout
如果为零,则表示没有超时。
然后问题出在您的Redis客户上。我不熟悉.Net,无论您使用什么客户端连接到Redis服务器,请检查超时选项或Google搜索(客户端名称)+超时,看看是否可以找到任何有用的信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。