Episode ini membahas cara mengintegrasikan Redis ke aplikasi nyata: client library populer untuk Node.js, Python, Go, dan Java, connection pooling, key naming convention, serta best practices seperti TTL wajib dan larangan penggunaan KEYS di produksi.

Sejauh ini semua interaksi memakai redis-cli. Di episode 16, kalian belajar menghubungkan Redis ke aplikasi sungguhan — lewat client library untuk bahasa pemrograman favorit kalian, lengkap dengan best practices integrasi yang menjaga performa dan keandalan.
Kalian akan melihat pola yang sama di tiga bahasa populer — Node.js, Python, dan Go — lalu membedah connection pooling, penamaan key yang konsisten, dan kebiasaan yang wajib dan terlarang saat memakai Redis dari aplikasi.
Redis punya library resmi maupun komunitas untuk hampir semua bahasa. Yang perlu kalian kenali:
| Bahasa | Library | Catatan |
|---|---|---|
| Node.js | ioredis, redis | ioredis populer untuk cluster & Lua |
| Python | redis-py | Library resmi, dukungan asyncio |
| Go | go-redis | Umum dipakai untuk layanan berbasis Go |
| Java | Jedis, Lettuce | Lettuce mendukung reactive & cluster |
Semua library di atas berbicara protokol RESP yang sama — jadi konsep yang kalian pelajari di series ini berlaku identik.
import Redis from "ioredis";
const client = new Redis({ host: "127.0.0.1", port: 6379 });
await client.set("greeting", "halo");
const value = await client.get("greeting");
console.log(value);
await client.quit();new Redis({ host, port }) membuat koneksi, lalu set/get berjalan dengan semantik yang sama seperti redis-cli. Perhatikan: quit() wajib dipanggil saat shutdown agar koneksi dilepas rapi.
import redis
client = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True)
client.set("greeting", "halo")
print(client.get("greeting"))redis.Redis(host=..., port=..., decode_responses=True) membuat klien — decode_responses=True penting agar nilai dikembalikan sebagai string, bukan bytes. Untuk aplikasi async, redis.asyncio.Redis menyediakan API yang setara.
Membuat koneksi TCP baru untuk setiap request sangat mahal: handshake, autentikasi, dan socket baru setiap kali. Connection pooling memelihara sejumlah koneksi dan memakainya bergantian.
import redis
from redis.connection import ConnectionPool
pool = ConnectionPool(host="127.0.0.1", port=6379, max_connections=50)
client = redis.Redis(connection_pool=pool)ConnectionPool(..., max_connections=50) membuat pool berbagi maksimal 50 koneksi. Semua pemanggilan client memakai pool ini — koneksi dipinjam dan dikembalikan otomatis, bukan dibuat ulang.
Info
Hampir semua library modern memakai pooling secara default di balik layar. Yang kalian perlu pastikan: tidak membuat instance client baru untuk setiap request, dan menutup pool dengan benar saat aplikasi berhenti.
Redis tidak punya namespace — penamaan key adalah satu-satunya "struktur" kalian. Ikuti pola service:entity:id:field:
app:user:123:profile
app:session:9f3a
cart:user:123:items
app:cache:product:456app:user:123:profile dan kawan-kawannya dibaca dari kiri ke kanan: service, entity, id, lalu field. Konsistensi ini memudahkan SCAN berpattern (app:cache:*), debugging, dan menghindari tabrakan antar service di satu instance.
Kebiasaan yang di episode 3-4 sudah ditekankan, sekarang jadi aturan mutlak di aplikasi:
await client.set("app:cache:product:456", JSON.stringify(data), "EX", 300);client.set(key, value, "EX", 300) menulis cache dengan masa hidup 300 detik. Tanpa TTL, cache tumbuh tanpa batas, menekan maxmemory, dan memicu eviction massal yang justru menurunkan hit ratio.
Di episode 3 kalian belajar kenapa KEYS berbahaya. Dari aplikasi, terapkan SCAN:
cursor = 0
while True:
cursor, keys = client.scan(cursor=cursor, match="app:cache:*", count=100)
for key in keys:
client.delete(key)
if cursor == 0:
breakclient.scan(cursor=..., match=..., count=...) mengiterasi key secara bertahap tanpa memblokir server — pola batching yang sama seperti SCAN di redis-cli. Pembersihan massal cache dilakukan dengan cara ini, bukan KEYS + DEL.
pipeline() daripada loop serial — mengurangi round-trip (episode 9).SMEMBERS, LRANGE 0 -1, dan HGETALL pada struktur besar memblokir server — batasi dengan ...BYRANK/HSCAN.Episode 16 membekali kalian integrasi aplikasi: client library ioredis, redis-py, dan go-redis; connection pooling untuk menghindari overhead koneksi; key naming convention service:entity:id:field; serta best practices TTL wajib dan larangan KEYS di produksi.
Inti yang harus dibawa pulang:
SCAN menggantikan KEYS untuk iterasi aman dari aplikasi.Di episode 17 selanjutnya kita membahas Memory Management & Performance Tuning — menjaga Redis tetap kencang. Kalian akan belajar menganalisis memori dengan INFO memory dan MEMORY USAGE, memahami fragmentasi, mengoptimalkan encoding internal, serta menganalisis latency dengan SLOWLOG dan LATENCY. Siap mengasah performa?