连接到集群时如何关闭ioredis(nodejs模块)?

时间:2018-12-17 15:09:20

标签: node.js redis event-loop ioredis

我编写了一个使用ioredis的模块,并进行了一些测试。

问题是,当我在群集模式下连接ioredis时,即使我叫redis.disconnect(),摩卡仍会挂起。

似乎事件循环仍然有约束力。

这是我的考试:

it('connects to redis cluster mode', async () => {
  //redisClientFactroy is my module
  let redisClientFactory = redisClientFactoryInit({
    host: 'localhost',
    port: 7000
  })
  // it returns a redis.cluster instance if it recognizes it
  // 'redis' here is a cluster client
  let redis = await redisClientFactory.createClient()
  await redis.set('took123', 1);
  let took = await redis.get('took123')
  expect(took).to.eql('1')
  let nodes = redis.nodes()
  await Promise.all(nodes.map((node) => {
    node.disconnect()
    console.log("node disconnected")
  }))
  redis.disconnect()

  //tests are marked as done and passing, but mocha does not exit
})

2 个答案:

答案 0 :(得分:0)

您无需手动使用Promise或关闭节点连接。只需致电

supplier.id | count(*)
1             3
2             0
3             1
4             9

在群集模式下,它将自行关闭所有打开的连接。查看disconnect method in sources

如果您仍然需要手动关闭,请勿使用诺言-断开连接不会返回诺言。只是

redis.disconnect()

答案 1 :(得分:0)

我遇到了同样的问题,通过调用 redis.disconnect() 解决了,每个客户端都应该断开连接。