当我设置 k6 redis 客户端以连接到云中的 azure Redis 实例时,出现此错误:
ERRO[0001] Uncaught (in promise) i/o timeout
这是客户端设置代码:
const redisClient = new redis.Client({ addrs: new Array("myredis.redis.cache.windows.net:6380"), password: "primary_access_key_here" });
当它尝试通过redis客户端“设置”或“获取”时,它会立即返回“i/o超时”错误。
但是,当我运行本地 Redis 服务器然后将客户端指向本地主机时,它确实有效:
const redisClient = new redis.Client({ addrs: new Array("localhost"), password: "" });
有什么想法吗? k6 客户端中是否存在某些错误,导致其无法与 Azure Redis 缓存一起使用?
我尝试使用正确的密码主键将地址值设置为当前 Redis 实例。但是,当我使用空密码将其设置为 localhost 时,它会起作用。
经过一些故障排除和反复试验后,发现问题在于 Azure Redis 服务器设置为仅接受 SSL 请求。当我允许非 ssl 连接时,我可以直接连接到它。问题确实出在 k6 redis 客户端上,因为它仅使用不安全的 tcp 连接到 redis 服务器实例。因此,解决方案是等待 K6 更新其客户端以允许 SSL 连接,因为我们希望避免中间人攻击。