我们有一个nodejs应用程序位于Azure上,使用Redis缓存来自各种外部端点的数据,这样我们就不会不必要地耗尽API限制,并保持页面渲染速度很快,尽管有些端点非常慢。
随着应用程序的扩展,我们开始遇到一些Redis性能方面的问题。我在get setex调用周围设置了一些日志记录,以跟踪响应时间,在某些情况下,每个调用的响应时间可以超过500ms。然而,根据Azure仪表板,redis服务器负载是正常的。

作为一点背景知识,该应用程序托管在3个区域,每个区域都有应用程序服务和redis缓存。每个地域最多支持20个app服务主机。redis缓存之间没有交叉通信,因为不要求数据跨区域同步,并允许整个区域下降而不损失服务。我们为每个正在运行的进程创建一个单独的redis客户端,该客户端是共享的。
我们运行nodejs 14并使用ioredis 4.27.6,我们的配置是
const client = new Redis({
port,
host: server,
password: auth,
maxRetriesPerRequest: 2,
tls: {},
enableAutoPipelining: true,
enableOfflineQueue: true,
connectTimeout: 30000,
});慢速日志记录的一个例子
2021-10-10T09:10:53.369997968Z warn: redis slow redis {
2021-10-10T09:10:53.370045469Z "command": "setex",
2021-10-10T09:10:53.370053669Z "diffMs": 611,
2021-10-10T09:10:53.370065369Z "key": "getRolloutValue(product_over)"
2021-10-10T09:10:53.370070169Z }
2021-10-10T09:10:53.376250740Z warn: redis slow redis {
2021-10-10T09:10:53.376285841Z "command": "get",
2021-10-10T09:10:53.376293841Z "diffMs": 487,
2021-10-10T09:10:53.376303141Z "key": "getDataForProduct(enus, XXXX)",
2021-10-10T09:10:53.376328241Z "sizeStr": "8.93 KB"
2021-10-10T09:10:53.376332641Z }
2021-10-10T09:10:53.377994061Z warn: redis slow redis {
2021-10-10T09:10:53.378021261Z "command": "get",
2021-10-10T09:10:53.378028661Z "diffMs": 488,
2021-10-10T09:10:53.378037261Z "key": "getDataForProduct(enus, XXXX)",
2021-10-10T09:10:53.378045661Z "sizeStr": "5.45 KB"
2021-10-10T09:10:53.378049961Z }有没有人体验过这种情况,或者对我们如何提高性能的配置有什么建议?
非常感谢。
发布于 2021-10-15 07:11:45
我猜慢的原因不是redis自己,而是操作系统上下文切换,cpu被其他进程占用了。您可以尝试在一个隔离的环境中运行redis,而不需要任何其他应用程序。
https://stackoverflow.com/questions/69546866
复制相似问题