连接Docker Redis容器时触发Invalid argument type错误的原因排查
问题分析与解决
核心问题说明
你遇到的并非Redis容器连接失败,而是代码中的两个错误导致的报错:
- Redis客户端不支持直接传入布尔值作为value:
client.set("bla", true)里的true是布尔类型,@redis/client库的RESP编码器无法处理该类型,因此抛出Invalid argument type错误。 - 异步操作未正确处理:
client.get("bla")返回的是Promise对象,直接打印会显示Promise { <pending> },必须用await等待其执行完成才能获取实际值。
修复后的代码
(async () => { const redis = require("redis"); const client = redis.createClient({ socket: { host: "localhost", port: 6379, }, // password: '<password>' }); client.on("error", (err) => { console.log("Error " + err); }); await client.connect(); // 将布尔值转为字符串,或使用JSON序列化存储 await client.set("bla", "true"); // 用await获取异步操作的结果 const y = await client.get("bla"); console.log("connect!!!", y); // 可选:使用完毕后关闭客户端连接 await client.quit(); })();
验证容器连接状态
如果仍怀疑Redis容器的可用性,可通过redis-cli直接测试:
redis-cli ping
返回PONG则说明容器运行正常,连接无问题。
内容的提问来源于stack exchange,提问作者Jon Sud
相关产品推荐
相关产品推荐

