gpt4 book ai didi

asp.net-core - 为什么DistributedCache SessionHandler抛出连接问题?

转载 作者:行者123 更新时间:2023-12-03 06:44:39 25 4
gpt4 key购买 nike

我有一个.net核心应用程序,在 azure 的VM中运行,在那里我使用Redis作为DistributedCache的实现。这样,我们将用户 session 存储在Redis中,并且可以在Web场中共享。我们仅将Redis用于存储 session 。我们将Azure Redis缓存用于普通实例。 VM和Redis都在同一区域中。
在启动中添加:

 services.AddStackExchangeRedisCache(options => {
options.Configuration = configuration["RedisCache:ConnectionString"];
});
在网络应用中,redis关闭连接时出现间歇性问题。所有对Redis的调用都通过调用如下的 session 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, Idle/Faulted, last: EXPIRE, origin: ReadFromPipe, outstanding: 1, last-read: 0s 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..
在超时期间,我们不会遇到流量高峰,并且Redis实例不会承受任何重负载。
我不知道如何进一步解决此问题。任何的想法?

最佳答案

由于空闲时间过长,Redis服务器可能关闭了连接。
在您的Azure缓存控件中,您可以找到Redis服务器的配置,查看是否可以找到超时设置。
如果可以通过命令行发出命令,也可以发出此命令

CONFIG get timeout
如果为零,则表示没有超时。
然后问题出在您的Redis客户上。我不熟悉.Net,无论您使用什么客户端连接到Redis服务器,请检查超时选项或Google搜索(客户端名称)+超时,看看是否可以找到任何有用的信息。

关于asp.net-core - 为什么DistributedCache SessionHandler抛出连接问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63375428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com