Redis-Client für Node.js: ioredis
Redis ist ein leistungsstarkes In-Memory-Datenspeichersystem, das häufig als Datenbank, Cache und Nachrichtenbroker verwendet wird. Für die Interaktion mit Redis aus Node.js heraus gibt es mehrere Bibliotheken, aber eine der beliebtesten und funktionsreichsten ist ioredis. Diese Bibliothek bietet eine vollwertige, leistungsstarke und benutzerfreundliche API für die Arbeit mit Redis und unterstützt alle modernen Funktionen, einschließlich Clusterbildung, Pub/Sub, Transaktionen und Lua-Skripte.
In diesem Artikel werden wir ioredis im Detail betrachten, seine Installation, die wichtigsten Funktionen und praktische Codebeispiele in JavaScript (Node.js) vorstellen.
Installation und Verbindung
Die Installation von ioredis über npm oder yarn ist unkompliziert:
npm install ioredis# oderyarn add ioredisNach der Installation erstellen Sie eine Client-Instanz:
const Redis = require('ioredis');const redis = new Redis(); // Standardmäßig localhost:6379
// Oder mit expliziten Parameternconst redis = new Redis({ host: 'localhost', port: 6379, password: 'your_password', // falls ein Passwort gesetzt ist db: 0});Die Bibliothek unterstützt Promise und async/await, was den Code sauber und lesbar macht.
Grundlegende Datenoperationen
ioredis ermöglicht die Ausführung aller Standard-Redis-Befehle. Sehen wir uns Beispiele für die Arbeit mit Strings, Listen und Hashes an.
Arbeit mit Strings
async function stringExample() { await redis.set('user:1:name', 'Alexej'); const name = await redis.get('user:1:name'); console.log(name); // Alexej
// Setzen mit Ablaufzeit (TTL) await redis.setex('temp:code', 60, '123456'); // lebt 60 Sekunden}Arbeit mit Listen
async function listExample() { await redis.lpush('queue:tasks', 'task1', 'task2'); await redis.rpush('queue:tasks', 'task3'); const tasks = await redis.lrange('queue:tasks', 0, -1); console.log(tasks); // ['task2', 'task1', 'task3']}Arbeit mit Hashes
async function hashExample() { await redis.hset('user:1', { name: 'Maria', age: 28, city: 'Moskau' }); const age = await redis.hget('user:1', 'age'); console.log(age); // 28
const allData = await redis.hgetall('user:1'); console.log(allData); // { name: 'Maria', age: '28', city: 'Moskau' }}Pub/Sub (Publisher-Subscriber)
Redis unterstützt das Pub/Sub-Muster und ioredis bietet eine benutzerfreundliche Schnittstelle dafür. Wichtig: Der Abonnent muss eine separate Verbindung verwenden.
// Abonnentconst subscriber = new Redis();subscriber.subscribe('news', 'updates', (err, count) => { console.log(`Abonniert ${count} Kanäle`);});
subscriber.on('message', (channel, message) => { console.log(`Erhalten von ${channel}: ${message}`);});
// Herausgeber (kann in einem anderen Prozess sein)const publisher = new Redis();publisher.publish('news', 'Hallo, Welt!');publisher.publish('updates', 'Version 2.0 ist veröffentlicht');Arbeit mit dem Redis-Cluster
ioredis unterstützt die Clusterbildung hervorragend. Sie müssen lediglich eine Liste der Cluster-Knoten übergeben:
const cluster = new Redis.Cluster([ { host: 'node1.example.com', port: 6379 }, { host: 'node2.example.com', port: 6379 }, { host: 'node3.example.com', port: 6379 }]);
async function clusterExample() { await cluster.set('key', 'value'); const val = await cluster.get('key'); console.log(val); // value}Die Bibliothek verarbeitet automatisch die Weiterleitung von Befehlen zwischen Knoten (MOVED, ASK) und unterstützt Slots.
Transaktionen und Pipelines
Für die atomare Ausführung mehrerer Befehle verwenden Sie Transaktionen (MULTI/EXEC). Zur Leistungssteigerung verwenden Sie Pipelines.
Transaktionen
async function transaction Auch in der Bibliothek
Kafka Client Java: Vollständiges Tutorial mit Code-Beispielen
Datenbankmigrationen in TypeScript: TypeORM, Prisma und Drizzle
Arbeiten mit XML in PHP: Vollständiger Leitfaden zum Parsen und Erstellen von XML-Dokumenten
Event Bus und das Observer-Pattern in Java: Implementierung einer lose gekoppelten Architektur