首页 > 解决方案 > 是什么导致 Azure Redis 缓存中的 RedisTimeoutException?

问题描述

我有一个运行 2 个实例的 Azure 应用服务,它使用共享的 Azure Redis 缓存。大多数时候,一切都很好。但有时,我RedisTimeoutException会在应用服务日志中看到错误。通常,写入 (SETEX) 有一个超时,然后是大约 10 多个超时,这些超时是读取和写入的混合(我认为其他操作在超时之后排队)。

例子:

StackExchange.Redis.RedisTimeoutException: Timeout awaiting response 
(outbound=0KiB, inbound=1KiB, 5984ms elapsed, timeout is 5000ms), command=SETEX, next: GET <Key_name>,
inst: 0, qu: 0, qs: 14, aw: False, rs: ReadAsync, ws: Idle, in: 0, 
serverEndpoint: <Azure_Redis_instance>, mc: 1/1/0, mgr: 10 of 10 available, clientName: <App_service_instance>, 
IOCP: (Busy=0,Free=1000,Min=2,Max=1000), WORKER: (Busy=2,Free=32765,Min=2,Max=32767), v: 2.1.28.64774
(Please take a look at this article for some common client-side issues that can cause timeouts: https://stackexchange.github.io/StackExchange.Redis/Timeouts)

我已经按照他们的异常消息中的 URL 并通读了他们对可能超时原因的解释,但我不相信这些都是原因。这个副标题引起了我的注意,因为我确实qs: 14在上面的异常中看到了,但我们没有使用任何会长时间运行的命令。我们只使用它们的键设置/获取单个缓存条目。

在这些错误出现期间,我使用 Azure Portal > App Service > Metrics 刀片查看了 App Service,并且我没有看到 CPU 时间、内存工作集或连接(在任一实例上)应用服务)。我还检查了 Redis Cache 实例,没有看到内存或 CPU 使用率出现任何峰值。

我不确定接下来要调查什么。例如:

  1. 您会尝试他们的建议,即使用ConnectionMultiplexer 对象池来避免操作在慢操作后排队吗?(我宁愿找出为什么它很慢)
  2. 我是否忽略了另一个关键性能指标?
  3. 没看到解释mc: 1/1/0,是什么意思?

标签: redisstackexchange.redisazure-redis-cache

解决方案


推荐阅读