Node.js dengan ioredis: Instalasi, Operasi, Cluster, dan Praktik Terbaik

Node.js dengan ioredis: Instalasi, Operasi, Cluster, dan Praktik Terbaik

Update 10/12/25 · Read 4 min

Redis adalah database in-memory yang super cepat. Saat digabungkan dengan Node.js, Redis bisa digunakan untuk caching, session management, queue, pub/sub, dan berbagai aplikasi real-time. ioredis adalah library Node.js populer karena mendukung cluster, sentinel, async/await, dan connection pooling.

Artikel ini akan membahas Node.js + ioredis secara menyeluruh.


1. Instalasi Node.js dan ioredis

1.1 Install Node.js

Pastikan Node.js terpasang di sistem:

node -v
npm -v

1.2 Install ioredis

npm install ioredis

atau dengan Yarn:

yarn add ioredis

2. Koneksi Redis dengan Node.js

2.1 Koneksi Standalone Redis

const Redis = require('ioredis');
const redis = new Redis({
  host: '127.0.0.1',
  port: 6379,
  password: 'yourStrongPassword', // opsional
  db: 0
});

redis.on('connect', () => console.log('Redis connected'));
redis.on('error', (err) => console.error('Redis error', err));
  • new Redis() → membuat koneksi default ke Redis lokal.
  • Event connect dan error membantu memantau status Redis.

2.2 Koneksi dengan Cluster Redis

const Redis = require('ioredis');

const cluster = new Redis.Cluster([
  { host: '127.0.0.1', port: 7000 },
  { host: '127.0.0.1', port: 7001 },
  { host: '127.0.0.1', port: 7002 },
]);

cluster.on('connect', () => console.log('Redis cluster connected'));
cluster.on('error', (err) => console.error('Cluster error:', err));

Kelebihan cluster: otomatis membagi data antar node dan menyediakan high availability.


3. Operasi Dasar Redis dengan ioredis

3.1 String

await redis.set('name', 'Alice');
const name = await redis.get('name');
console.log(name); // Alice

3.2 Hash

await redis.hset('user:1001', 'name', 'Bob', 'email', 'bob@example.com');
const user = await redis.hgetall('user:1001');
console.log(user); // { name: 'Bob', email: 'bob@example.com' }

3.3 List

await redis.lpush('tasks', 'task1');
await redis.lpush('tasks', 'task2');
const tasks = await redis.lrange('tasks', 0, -1);
console.log(tasks); // ['task2', 'task1']

3.4 Set

await redis.sadd('fruits', 'apple', 'banana');
const fruits = await redis.smembers('fruits');
console.log(fruits); // ['apple', 'banana']

3.5 Expiry (TTL)

await redis.set('session123', 'user1', 'EX', 3600); // Expire 1 jam

4. Caching API dengan ioredis

Salah satu kasus penggunaan paling populer: caching data dari database atau API untuk meningkatkan performa.

async function getUser(userId) {
  const cacheKey = `user:${userId}`;
  const cached = await redis.get(cacheKey);

  if (cached) {
    console.log('Cache hit');
    return JSON.parse(cached);
  }

  console.log('Cache miss');
  // Simulasi fetch dari database
  const user = { id: userId, name: 'John Doe' };

  // Simpan ke Redis dengan TTL 1 jam
  await redis.set(cacheKey, JSON.stringify(user), 'EX', 3600);
  return user;
}

getUser(1).then(console.log);

Penjelasan:

  • Cache hit → data diambil langsung dari Redis.
  • Cache miss → data diambil dari DB dan disimpan ke Redis.

5. Pub/Sub di Node.js dengan ioredis

Redis bisa digunakan untuk messaging dengan publish/subscribe:

const publisher = new Redis();
const subscriber = new Redis();

// Subscriber
subscriber.subscribe('news', (err, count) => {
  if (!err) console.log(`Subscribed to ${count} channel(s)`);
});
subscriber.on('message', (channel, message) => {
  console.log(`Received from ${channel}: ${message}`);
});

// Publisher
setTimeout(() => {
  publisher.publish('news', 'Breaking news: ioredis is awesome!');
}, 1000);

6. Transaction dan Pipeline

6.1 Transaction

const transaction = redis.multi();
transaction.set('a', 10);
transaction.incr('a');
const results = await transaction.exec();
console.log(results); // [['OK'], [11]]

6.2 Pipeline (lebih efisien)

const pipeline = redis.pipeline();
pipeline.set('b', 5);
pipeline.incr('b');
const results = await pipeline.exec();
console.log(results); // [['OK'], [6]]

7. Event Handling dan Monitoring

ioredis mendukung event penting:

redis.on('ready', () => console.log('Redis ready'));
redis.on('close', () => console.log('Redis connection closed'));
redis.on('reconnecting', () => console.log('Redis reconnecting...'));
redis.on('error', (err) => console.error('Redis error:', err));

Ini membantu memantau koneksi Redis dan troubleshooting.

READ :  REST API dengan Express.js: Panduan Lengkap untuk Pemula

8. Praktik Terbaik Node.js + ioredis

  1. Gunakan async/await untuk kode bersih.
  2. Pisahkan koneksi Redis untuk cache, session, dan data utama.
  3. Gunakan TTL dan eviction policy untuk mencegah Redis kehabisan memori.
  4. Gunakan cluster untuk aplikasi high traffic.
  5. Tutup koneksi Redis saat aplikasi berhenti:
process.on('SIGINT', () => {
  redis.disconnect();
  process.exit();
});
  1. Monitoring rutin dengan event handling atau tools seperti RedisInsight.

9. Studi Kasus Lanjutan: Queue Task dengan Redis List

// Producer
await redis.lpush('jobQueue', JSON.stringify({ id: 1, task: 'send email' }));

// Consumer
setInterval(async () => {
  const job = await redis.rpop('jobQueue');
  if (job) {
    const task = JSON.parse(job);
    console.log('Processing task:', task);
  }
}, 1000);

Redis list digunakan sebagai queue sederhana, ideal untuk background task.


10. Kesimpulan

Dengan ioredis, Node.js dapat memanfaatkan Redis untuk berbagai kasus:

  • Caching API & Database
  • Session Management
  • Pub/Sub Messaging
  • Task Queue
  • Cluster untuk high traffic & scalability

Kombinasi Node.js + ioredis → aplikasi real-time, cepat, scalable, dan stabil.