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.
Contents
- 1 1. Instalasi Node.js dan ioredis
- 2 2. Koneksi Redis dengan Node.js
- 3 3. Operasi Dasar Redis dengan ioredis
- 4 4. Caching API dengan ioredis
- 5 5. Pub/Sub di Node.js dengan ioredis
- 6 6. Transaction dan Pipeline
- 7 7. Event Handling dan Monitoring
- 8 8. Praktik Terbaik Node.js + ioredis
- 9 9. Studi Kasus Lanjutan: Queue Task dengan Redis List
- 10 10. Kesimpulan
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
connectdanerrormembantu 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.
8. Praktik Terbaik Node.js + ioredis
- Gunakan async/await untuk kode bersih.
- Pisahkan koneksi Redis untuk cache, session, dan data utama.
- Gunakan TTL dan eviction policy untuk mencegah Redis kehabisan memori.
- Gunakan cluster untuk aplikasi high traffic.
- Tutup koneksi Redis saat aplikasi berhenti:
process.on('SIGINT', () => {
redis.disconnect();
process.exit();
});
- 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.
