redis - 是什么导致 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 使用率出现任何峰值。
我不确定接下来要调查什么。例如:
- 您会尝试他们的建议,即使用ConnectionMultiplexer 对象池来避免操作在慢操作后排队吗?(我宁愿找出为什么它很慢)
- 我是否忽略了另一个关键性能指标?
- 没看到解释
mc: 1/1/0
,是什么意思?
解决方案
推荐阅读
- mongodb - 如何使用其他两个字段的组合更新 mongodb 中的特定字段?
- python - Twitter 和 Python:在这里努力理解我的“列表索引超出范围”问题
- python - re 模式以匹配非数字文本前面的所有 n 位数字
- .htaccess - 如何使用 htaccess 将域重写为 s3
- java - 二叉搜索树删除功能擦除整个树
- jquery - 如何使下拉菜单出现在内容上而不是向下推送内容?
- python-3.x - 将安装的 pip 包添加到路径
- typescript - 在打字稿中扩展类与代码重复
- java - Gradle 项目中的 IntelliJ IDEA 编码问题
- angular - 部署应用程序后没有“Access-Control-Allow-Origin”