Back to Blog Database & Performance

Caching Redis untuk Web Apps

Redis mempercepat aplikasi ketika data yang sama dibaca berulang dan biaya mengambilnya tinggi. Tantangan sebenarnya bukan menyimpan cache, melainkan memastikan cache tidak basi dan tidak menjadi titik kegagalan baru.

Request→Redis?
hitResponse
missDatabase → Cache

Pola cache-aside

PHP
$key = 'product:'.$productId;
$product = $redis->get($key);
if ($product === null) {
    $product = $repository->find($productId);
    $redis->setex($key, 300, json_encode($product));
} else {
    $product = json_decode($product, true);
}

Invalidasi setelah perubahan

PHP
$repository->update($product);
$redis->del('product:'.$product->id);
$redis->del('products:list:featured');

Delete-after-write lebih sederhana daripada mencoba mengubah semua varian cache. Request berikutnya akan mengisi cache dengan data terbaru.

Pilih struktur data sesuai kebutuhan

Redis typeContoh penggunaan
StringCache JSON, token pendek, counter.
HashAtribut object yang diperbarui sebagian.
SetKeanggotaan unik, permission.
Sorted setLeaderboard, delayed jobs.
StreamEvent log dan consumer group.

Jangan cache semuanya

Data yang jarang dibaca, selalu berubah, atau murah dihitung tidak perlu cache. Cache juga tidak menggantikan index database yang benar. Ukur hit rate dan dampak latency sebelum menambah kompleksitas.

TTL

Batasi umur data basi.

Namespace

Gunakan prefix per aplikasi dan environment.

Memory policy

Tentukan eviction ketika memori penuh.

Observability

Pantau hit rate, evictions, latency, dan connected clients.

Share this article

Related articles

Copied