Obsługa błędów i rozwiązywanie problemów Redis w Node.js

Rozwiązywanie problemów i obsługa błędów w NodeJS aplikacji podczas integracji z nią Redis jest niezbędnym procesem zapewniającym stabilność i wydajność aplikacji.

Poniżej znajdują się szczegółowe informacje i przykłady rozwiązywania problemów i obsługi błędów podczas pracy z Redis aplikacją NodeJS.

Pogląd Redis log

Redis udostępnia dzienniki do rejestrowania ważnych zdarzeń, ostrzeżeń i błędów. Te dzienniki mogą być przydatne do rozwiązywania problemów z Redis. Aby umożliwić logowanie Redis należy zmodyfikować redis.conf plik konfiguracyjny i ustawić odpowiedni poziom logowania.

Oto przykład włączenia logowania do pliku:

# In redis.conf  
logfile /var/log/redis/redis.log  
loglevel verbose  

Upewnij się, że log katalog plików istnieje i jest dostępny do zapisu przez Redis proces.

Używać Redis Monitor

Redis Monitor to wbudowane polecenie, które umożliwia monitorowanie w czasie rzeczywistym Redis poleceń wykonywanych na serwerze. Jest to pomocne w zrozumieniu rzeczywistych poleceń wysyłanych do programu Redis.

Oto przykład użycia Redis Monitor z biblioteką „ioredis” w NodeJS aplikacji:

const Redis = require('ioredis');  
const redis = new Redis();  
  
redis.monitor((err, monitor) => {  
  console.log('Started monitoring Redis commands');  
  monitor.on('monitor',(time, args, source, database) => {  
    console.log('Command:', args);  
  });  
});  

Ten kod konfiguruje Redis monitor, który drukuje każde Redis polecenie otrzymane przez serwer w czasie rzeczywistym.

Obsługa błędów asynchronicznych

Podczas pracy Redis w NodeJS aplikacji wiele Redis operacji jest asynchronicznych, co oznacza, że ​​używają callback lub Promises.

Właściwa obsługa błędów ma kluczowe znaczenie dla uniknięcia awarii aplikacji. Oto przykład obsługi błędów za pomocą callback:

const Redis = require('ioredis');  
const redis = new Redis();  
  
redis.get('key',(err, result) => {  
  if(err) {  
    console.error('Error:', err);  
    return;  
  }  
  console.log('Result:', result);  
});  

I używając async/await z Promises:

const Redis = require('ioredis');  
const redis = new Redis();  
  
async function getValue() {  
  try {  
    const result = await redis.get('key');  
    console.log('Result:', result);  
  } catch(err) {  
    console.error('Error:', err);  
  }  
}  
  
getValue();  

Zarządzaj Redis połączeniami

Do zarządzania Redis połączeniami zaleca się korzystanie z puli połączeń udostępnianej przez Redis bibliotekę klienta. Na przykład z „ioredis”:

const Redis = require('ioredis');  
const redis = new Redis({  
  // connection options here  
});  

Klient będzie automatycznie zarządzał połączeniami i efektywnie je ponownie wykorzystywał.

Obsługuj sprawy, gdy Redis jest niedostępny

Aby obsłużyć przypadki, gdy Redis jest niedostępny lub odpowiada wolno, rozważ ustawienie odpowiednich limitów czasu i bezproblemową obsługę błędów połączenia.

const Redis = require('ioredis');  
const redis = new Redis({  
  retryStrategy:(times) => {  
    return Math.min(times * 50, 2000); // Retry with exponential backoff up to 2 seconds  
  },  
});  

Używać Redis Sentinel

Redis Sentinel zapewnia wysoką dostępność i monitorowanie Redis klastrów. Automatycznie obsługuje przełączanie awaryjne, gdy węzeł główny staje się niedostępny.

Oto przykładowa konfiguracja:

sentinel monitor mymaster 127.0.0.1 6379 2  
sentinel down-after-milliseconds mymaster 5000  
sentinel failover-timeout my  

Powyższa konfiguracja konfiguruje urządzenie Redis Sentinel monitorujące Redis master z progiem w dół po milisekundach wynoszącym 5000 ms, limitem czasu przełączania awaryjnego równym 10 000 ms i 1 synchronizacją równoległą.

 

Postępując zgodnie z tymi krokami i przykładami, możesz skutecznie rozwiązywać problemy i radzić sobie z błędami podczas pracy z Redis aplikacją NodeJS, zapewniając niezawodność i wydajność aplikacji.