Ang*_* R. 4 redis node.js node-redis twemproxy
直接通过redis-cli连接到我的twemproxy将正确地代理我到redis,没有任何问题/断开连接.但是,当我使用node-redis连接到twemproxy时,我收到以下错误:
[Error: Redis connection gone from end event.]
Run Code Online (Sandbox Code Playgroud)
跟踪如下:
Error: Ready check failed: Redis connection gone from end event.
at RedisClient.on_info_cmd (/home/vagrant/tests/write-tests/node_mo
dules/redis/index.js:368:35)
at Command.callback (/home/vagrant/tests/write-tests/node_modules/r
edis/index.js:418:14)
at RedisClient.flush_and_error (/home/vagrant/tests/write-tests/nod
e_modules/redis/index.js:160:29)
at RedisClient.connection_gone (/home/vagrant/tests/write-tests/nod
e_modules/redis/index.js:474:10)
at Socket.<anonymous> (/home/vagrant/tests/write-tests/node_modules
/redis/index.js:103:14)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:919:16
at process._tickCallback (node.js:419:13)
Run Code Online (Sandbox Code Playgroud)
无论redis-server是否正在运行,都会发生此错误,所以我很确定它与node-redis和twemproxy的交互方式有关.或者不根据具体情况进行交互.
到底发生了什么?
我有一个简单的测试设置,如下所示:
+------------------+
| +----+----+ |
| | r1 + r2 + |
| +----+----+ |
| | | |
| +---------+ |
| |twemproxy| |
| +---------+ |
| / | \ |
| +----+----+----+ |
| | aw | aw | aw | |
| +----+----+----+ |
+------------------+
aw = api worker
r1/r2 = redis instance
twemproxy = twemproxy
Run Code Online (Sandbox Code Playgroud)
Ang*_* R. 10
经过一番挖掘后,我意识到这是因为node_redis在默认情况下尝试在连接上调用"info"命令.
简单地修改连接选项以包含no_ready_check: true将解决此问题并通过twemproxy强制连接.
| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |