Lewati ke konten utama
menjadi.dev
Chapter 17.16 Backend Lanjutan

Redis: Optimasi dan Production

Konfigurasi production, monitoring, dan pattern advanced

Tujuan Pembelajaran

  • Mengerti Redis persistence options
  • Bisa konfigurasi Redis untuk production
  • Mengerti Redis Cluster dan Sentinel

Analogi

Diagram

      Production Checklist:
├── Persistence (RDB + AOF)
├── Memory management (maxmemory policy)
├── Security (AUTH, ACL)
├── Monitoring (INFO, Slow Log)
└── High Availability (Sentinel, Cluster)
    

Redis production membutuhkan konfigurasi yang tepat untuk reliability dan performance

Penjelasan Konsep

Saat menjalankan Redis di production, ada beberapa aspek penting yang harus dikonfigurasi dengan benar.

Persistence

Redis menyimpan data di memory, tapi ada opsi persistensi ke disk:

  1. RDB (Redis Database): Snapshot data periodic
  • Pros: Compact file, fast restore,

Minimal performance impact

  • Cons: Data loss antara snapshots (default: 5 menit)
  • Config: save 900 1 (save kalau 1 key berubah dalam 900 detik)
  1. AOF (Append Only File): Log setiap write operation
  • Pros: Minimal data loss (max 1 detik dengan appendfsync everysec)
  • Cons: File lebih besar,

Slower rewrite

  • Config: appendonly yes, appendfsync everysec
  1. Both: RDB + AOF untuk safety maksimal

Memory Management

Redis akan menggunakan semua memory yang tersedia kalau tidak dibatasi.

Konfigurasi penting:

maxmemory 256mb
maxmemory-policy allkeys-lru

Policies saat memory penuh:

  • noeviction: Return error untuk write (default,

Tidak disarankan)

  • allkeys-lru: Hapus key yang least recently used
  • allkeys-lfu: Hapus key yang least frequently used
  • volatile-lru: Hapus key dengan TTL yang LRU
  • volatile-ttl: Hapus key dengan TTL terpendek

Untuk caching, allkeys-lru atau allkeys-lfu paling umum.

Security

  1. AUTH password: Require password untuk koneksi

    requirepass your-strong-password
  2. ACL (Redis 6+): Fine-grained access control

    ACL SETUSER app_user on >password ~app:* +@read +@write -@admin
  3. Bind address: Hanya listen pada interface tertentu

    bind 127.0.0.1  # Hanya localhost
  4. Protected mode: Hanya menerima koneksi dari localhost

Monitoring

  • INFO command: Statistik Redis (memory, connections, commands)
  • SLOWLOG: Query yang lambat
  • MONITOR: Real-time command monitoring (hati-hati di production!)

Redis Sentinel: High Availability

Sentinel menyediakan automatic failover:

  • Monitor Redis master
  • Deteksi failure
  • Promote slave menjadi master otomatis
  • Update client dengan master baru

Redis Cluster: Horizontal Scaling

Cluster memungkinkan Redis di-scale horizontal dengan auto-sharding:

  • Data di-partisi ke 16384 hash slots
  • Setiap node punya subset slots
  • Automatic rebalancing saat node ditambah/dihapus

Contoh Kode

bash
# redis.conf untuk production
# Persistence
appendonly yes
appendfsync everysec
save 900 1
save 300 10
save 60 10000

# Memory
maxmemory 256mb
maxmemory-policy allkeys-lru

# Security
bind 127.0.0.1
requirepass your-secure-password
protected-mode yes

# Logging
loglevel notice
logfile /var/log/redis/redis-server.log

# Slow log (log queries > 10ms)
slowlog-log-slower-than 10000
slowlog-max-len 128

# Docker Compose setup
# docker-compose.yml
version: '3'
services:
  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    restart: unless-stopped

volumes:
  redis-data:

Penjelasan Kode

appendfsync everysec = keseimbangan antara durability dan performance. allkeys-lru = hapus key yang jarang diakses saat memory penuh.

Prompt AI

Setup Redis dengan Docker Compose. Konfigurasi persistence dan memory limits. Uji dengan load test menggunakan redis-benchmark.

Pertanyaan Reflektif

Redis single-threaded — scaling horizontal dengan Cluster lebih baik daripada vertical scaling untuk write-heavy workloads.