Node-redis: Criação do cliente redis usando o objeto de opções sem host e porta.

Criado em 16 mar. 2019  ·  18Comentários  ·  Fonte: NodeRedis/node-redis

Este código é executado sem erros, mesmo se não houver um servidor local em execução. É um comportamento correto ou um bug?

const redis = require('redis')
const redisClient = redis.createClient({ retry_strategy: () => 1000 })
  • Versão : 2.8.
  • Plataforma : Node.js 10.15.3 Mac OS X Mojave, Node.js 11 alpine, Node.js 10.15.3 alpine
  • Descrição : Criando cliente redis usando o objeto de opções sem host e porta.
Evaluating

Todos 18 comentários

@mikhailsidorov - Sim, correto, pois as opções padrão são 'localhost' e 6379 respectivamente.

Ah, mas você está afirmando que não há um servidor Redis local em execução? hahaha
Isso seria incrivelmente estranho.

Garanto que você ainda tem uma instância do Redis em execução ... vá para o console da linha de comando do Linux.

Ver todas as instâncias em execução do Redis
ps -aux | grep redis-server

Elimine todas as instâncias do Redis
killall redis-server

Fechar tíquete?

Corri no docker, sem redis. Deixe-me verificar novamente.

O Redis deve estar rodando em algum lugar, tentei no meu ambiente e executei /etc/init.d/redis-server stop . A primeira vez que fez exatamente como você mencionou, fiquei perplexo! Então executei ps -aux | grep redis-server descobri que tinha sete instâncias do Redis em execução em segundo plano, lol. Depois de matar todos, o nó foi redefinido imediatamente, conforme o esperado.

@mikhailsidorov - Sim, correto, pois as opções padrão são 'localhost' e 6379 respectivamente.

Ah, mas você está afirmando que não há um servidor Redis local em execução? hahaha
Isso seria incrivelmente estranho.

Garanto que você ainda tem uma instância do Redis em execução ... vá para o console da linha de comando do Linux.

Ver todas as instâncias em execução do Redis
ps -aux | grep redis-server

Elimine todas as instâncias do Redis
killall redis-server

Fechar tíquete?

Não há processos redis-server na minha máquina e no docker container. Além disso, não tenho nenhum processo de escuta da porta 6379 ( netstat -an | grep 6379 não retorna nada).

O Redis deve estar rodando em algum lugar, tentei no meu ambiente e executei /etc/init.d/redis-server stop . A primeira vez que fez exatamente como você mencionou, fiquei perplexo! Então executei ps -aux | grep redis-server descobri que tinha sete instâncias do Redis em execução em segundo plano, lol. Depois de matar todos, o nó foi redefinido imediatamente, conforme o esperado.

Não encontrei nenhum processo do redis-server rodando.

Preparei um exemplo para reproduzir o problema, consulte este repositório https://github.com/mikhailsidorov/redis-issue
Este código está sendo executado sem erros, e não tenho processos de redis-server executados na máquina testada e no contêiner do docker.

Por acaso você está executando o redis-mock ou algo semelhante? (Duvido, só checando ...)
https://github.com/faeldt/redis-mock

Aqui está o erro que recebo quando desligo o Redis e executo meu aplicativo ... (Este não é o aplicativo docker que você forneceu) Eu preciso configurar o docker, ainda não estou usando o docker, tenho que seguir com os tempos. Vou tentar um pouco mais tarde ...

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

Por acaso você está executando o redis-mock ou algo semelhante? (Duvido, só checando ...)
https://github.com/faeldt/redis-mock

Aqui está o erro que recebo quando desligo o Redis e executo meu aplicativo ... (Este não é o aplicativo docker que você forneceu) Eu preciso configurar o docker, ainda não estou usando o docker, tenho que seguir com os tempos. Vou tentar um pouco mais tarde ...

Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1054:14)
Emitted 'error' event at:
    at RedisClient.on_error (/mnt/c/indospace.io/services/node_modules/redis/index.js:406:14)
    at Socket.<anonymous> (/mnt/c/indospace.io/services/node_modules/redis/index.js:279:14)
    at Socket.emit (events.js:196:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:17)

Não, eu não uso o redis-mock. Quando executo const redisClient = redis.createClient() sem opções, recebo o mesmo erro, mas quando passo { retry_strategy: () => 1000 } , recebo este problema.

ok, acho que estamos na mesma página agora ...

Sim, o código de nova tentativa de conexão / reconexão do node_redis parece completamente quebrado no momento, há vários tíquetes abertos referentes a esses problemas. Recebi solicitações de RP em outros módulos do nodeJS esta noite, vou tentar mergulhar nisso e enviar uma RP válida quando puder.

ok, acho que estamos na mesma página agora ...

Sim, o código de nova tentativa de conexão / reconexão do node_redis parece completamente quebrado no momento, há vários tíquetes abertos referentes a esses problemas. Recebi solicitações de RP em outros módulos do nodeJS esta noite, vou tentar mergulhar nisso e enviar uma RP válida quando puder.

Obrigado

Isso é um tanto intencional. Verifique connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

A intenção é ter uma função muito poderosa onde toda a lógica de reconexão esteja nas mãos do usuário. Porém, pode nem sempre ser ideal.

Isso é um tanto intencional. Verifique connect_timeout : Default is to try connecting until the default system socket timeout has been exceeded and to try reconnecting until 1h has elapsed. .

A intenção é ter uma função muito poderosa onde toda a lógica de reconexão esteja nas mãos do usuário. Porém, pode nem sempre ser ideal.

Obrigado pelo esclarecimento.

@mikhailsidorov - fechar problema?

@knoxcard Eu gostaria de manter isto em aberto para eu mesmo olhar para isso novamente quando eu encontrar algum tempo.

@knoxcard, obrigado por analisar alguns problemas aqui! Você está interessado em ajudar mais em geral?

@BridgeAR - absolutamente! como devo ajudar mais?

@mikhailsidorov - fechar problema?

Claro, se for necessário. Obrigado

@mikhailsidorov - deixa pra lá de encerrar a questão, a BridgeAr quer manter essa questão aberta, obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

michaelwittig picture michaelwittig  ·  3Comentários

aletorrado picture aletorrado  ·  6Comentários

twappworld picture twappworld  ·  7Comentários

yuany picture yuany  ·  4Comentários

Atala picture Atala  ·  3Comentários