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.
Pola cache-aside
$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
$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 type | Contoh penggunaan |
|---|---|
| String | Cache JSON, token pendek, counter. |
| Hash | Atribut object yang diperbarui sebagian. |
| Set | Keanggotaan unik, permission. |
| Sorted set | Leaderboard, delayed jobs. |
| Stream | Event 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.
Batasi umur data basi.
Gunakan prefix per aplikasi dan environment.
Tentukan eviction ketika memori penuh.
Pantau hit rate, evictions, latency, dan connected clients.
