Node-redis: НСт ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 9 ΠΌΠ°Ρ€. 2019  Β·  6ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: NodeRedis/node-redis

ΠŸΡ€ΠΈΠ²Π΅Ρ‚,
Π― Π½Π΅ ΠΌΠΎΠ³Ρƒ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Redis.

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ эту ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ:

  const client = redis.createClient({
    no_ready_check: false,
    enable_offline_queue: true,
    retry_unfulfilled_commands: true,
    socket_keepalive: true,
    retry_strategy: function (options) {
      if (options.error && options.error.code === 'ECONNREFUSED') {
        // End reconnecting on a specific error and flush all commands with
        // a individual error
        return new Error('The server refused the connection');
      }
      if (options.total_retry_time > 1000 * 60 * 60) {
        // End reconnecting after a specific timeout and flush all commands
        // with a individual error
        return new Error('Retry time exhausted');
      }
      if (options.attempt > 10) {
        // End reconnecting with built in error
        return undefined;
      }
      console.log('here');
      // reconnect after
      return 100;
    },
    host: process.env.REDIS_HOST || '127.0.0.1',
    port: 6379
  });

Π― Π²ΠΈΠΆΡƒ here ΠΊΠΎΠ³Π΄Π° ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ redis, Π½ΠΎ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ Π΅Π³ΠΎ снова ΠΈ ΠΆΠ΄Ρƒ любоС врСмя, Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ redis Π΄Π°ΡŽΡ‚ ΠΌΠ½Π΅:

{ AbortError: EXEC can't be processed. The connection is already closed.
    at handle_offline_command (/Users/kstoney/git/autotrader/platform-alert-forwarder/node_modules/redis/index.js:851:15)
    at RedisClient.internal_send_command (/Users/kstoney/git/autotrader/platform-alert-forwarder/node_modules/redis/index.js:885:9)
    at Multi.exec_transaction (/Users/kstoney/git/autotrader/platform-alert-forwarder/node_modules/redis/lib/multi.js:115:18)
    at Object.RedisCache.self.set (/Users/kstoney/git/autotrader/platform-alert-forwarder/lib/caches/redis.js:41:8)
    at Object.sendMessage [as handle] (/Users/kstoney/git/autotrader/platform-alert-forwarder/lib/forwarders/slack.js:197:28)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
  command: 'EXEC',
  code: 'NR_CLOSED',
  errors:
   [ { AbortError: SET can't be processed. The connection is already closed.

Π•ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ? МнС Π½ΡƒΠΆΠ½Π° нСкоторая Ρ‚Π΅Ρ€ΠΏΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ красным сообщСниям.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π”Π°, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° ioredis, Ρ…Π°-Ρ…Π°

ВсС 6 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π±Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, моя конфигурация ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½ΠΈΠΆΠ΅:

var client = redis.createClient({
    port: process.env.REDIS_PORT,
    host: process.env.REDIS_HOST,
    retry_strategy: function (options) {
        if (options.error && options.error.code === 'ECONNREFUSED') {
            // End reconnecting on a specific error and flush all commands with
            // a individual error
            logger.debug('[Redis Strategy] - Connection Refused options:', options);
            return new Error('The server refused the connection');
        }
        if (options.total_retry_time > 1000 * 60 * 60) {
            // End reconnecting after a specific timeout and flush all commands
            // with a individual error
            logger.debug('[Redis Strategy] - Time exhausted options:', options);
            return new Error('Retry time exhausted');
        }
        if (options.attempt > 10) {
            // End reconnecting with built in error
            return undefined;
        }
        // reconnect after
        return Math.min(options.attempt * 100, 3000);
    }
});

client.on('connect', function () {
    console.log('Redis client connected');
});

client.on('error', function (err) {
    console.log('Something went wrong ' + err);
});

Π’Π°Ρƒ, Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния.
Π― Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ свои прилоТСния с https://github.com/Unitech/pm2 , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСзапускаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° происходит сбой, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»ΠΎΡΡŒ довольно Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя Π½Π΅Π·Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΌ.

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΡƒΠ»ΠΎΠ²!

Π•ΡΡ‚ΡŒ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ исправлСно? (Π― Π²ΠΈΠΆΡƒ, Ρ‡Ρ‚ΠΎ послСдний выпуск 2 Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄)

Π”Π°, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° ioredis, Ρ…Π°-Ρ…Π°

@Stono БогласСн, сСгодня я ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΆΡƒ Π½Π°

Бпасибо, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π²ΡƒΡ‡ΠΈΡ‚ Π»ΡƒΡ‡ΡˆΠ΅, я Π½Π΅ Π±Ρ‹Π» Π·Π½Π°ΠΊΠΎΠΌ с этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.
Unfourtantley для этого Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° я Π½Π΅ смогу ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ, Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Ρ‚ΡŒ для Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ