我确定这里的问题不在于 StackExchange.Redis,而是我们的 Azure 应用服务配置/启动/设置中的某些内容。
我们多年来一直愉快地使用 StackExchange.Redis。我们将 Azure 应用服务迁移到 .NET 8,现在 Redis 非常慢并且经常出错:
Timeout performing EXISTS (5000ms),
next: EXISTS XXX,
inst: 10, qu: 0, qs: 0,
aw: False, bw: SpinningDown,
rs: ReadAsync,
ws: Idle, in: 208,
last-in: 0, cur-in: 0, sync-ops: 20932,
async-ops: 1,
serverEndpoint: XXX-XXXXX-REDIS-ECOM-PRD-1-STAGE.redis.cache.windows.net:6380,
conn-sec: 64302.22, aoc: 0, mc: 1/1/0,
mgr: 10 of 10 available,
clientName: DW0MDWK0000LG(SE.Redis-v2.8.0.27420),
IOCP: (Busy=0,Free=1000,Min=1,Max=1000),
WORKER: (Busy=37,Free=32730,Min=2,Max=32767),
POOL: (Threads=37,QueuedItems=64,CompletedItems=315273,Timers=29),
v: 2.8.0.27420
我的直觉是这在某种程度上与 Azure 应用程序的资源有关。
我可以增加超时,但 Redis 应该在远小于 5000 毫秒的时间内返回这些轻型查询。
我已尝试解释该错误消息,但未能成功。
Redis 向导可以解释一下吗?
迁移到 Azure 应用服务上的 .NET 8 后,您似乎遇到了 StackExchange.Redis 的性能问题。您看到的超时错误和缓慢的响应时间令人沮丧,但有一些常见的罪魁祸首以及您可以采取的解决步骤。
了解错误消息 存在超时执行(5000ms):
这意味着 EXISTS 命令在 5 秒后超时。这表明您的应用程序和 Redis 服务器之间的通信存在延迟。 连接指标:
指标显示您的 Redis 连接和线程在预期范围内,因此不太可能是连接池问题。 客户端版本:
您使用的是 StackExchange.Redis v2.8.0.27420,它已经很旧了。较新的版本通常会带来性能改进和错误修复。 可能的原因和解决方案 资源限制:
检查您的 Azure 应用服务是否耗尽 CPU 或内存等资源。如果负载很重,请考虑扩展到更高的服务层。 网络延迟:
确保您的 Redis 实例和应用服务位于同一区域,以减少网络延迟。高延迟可能会导致超时。 连接池配置:
检查并调整您的 Redis 连接池设置。默认设置可能需要根据应用程序的工作负载进行优化。 Redis 服务器性能:
监控 Redis 服务器的性能。如果负载很重或配置错误,则可能会减慢响应时间。 应用程序更改:
自从您迁移到 .NET 8 后,请检查应用程序与 Redis 交互方式的任何更改是否可能影响性能。 升级 StackExchange.Redis:
考虑将 StackExchange.Redis 更新到更新版本。新版本可能会有一些改进,有助于解决性能问题。