Selamat datang kembali di seri tutorial pemrograman PHP! Di part sebelumnya, kita telah membahas cara membangun RESTful API dengan PHP dan Slim Framework. Sekarang, kita akan menyelam lebih dalam ke optimasi kinerja API kita dengan mengimplementasikan strategi caching tingkat lanjut. Caching adalah teknik penting untuk mengurangi latensi dan meningkatkan throughput aplikasi web Anda. Prasyarat untuk tutorial ini adalah pemahaman dasar tentang RESTful API, PHP, dan konsep caching dasar.
Bayangkan Anda memiliki restoran yang sangat populer. Setiap kali pelanggan memesan hidangan yang sama, juru masak harus menyiapkan semuanya dari awal. Ini memakan waktu dan sumber daya. Caching itu seperti menyiapkan sebagian hidangan di muka dan menyimpannya di lemari es. Ketika pelanggan memesan hidangan tersebut lagi, kita bisa langsung menyajikannya dari lemari es, jauh lebih cepat!
Dalam konteks API, caching berarti menyimpan hasil dari permintaan API yang sering diakses di lokasi yang lebih cepat diakses, seperti memori. Ketika permintaan yang sama datang lagi, kita bisa langsung mengembalikan data yang disimpan tanpa harus memproses ulang permintaan tersebut.
Mari kita implementasikan server-side caching menggunakan Redis untuk API kita yang dibangun dengan Slim Framework.
Langkah 1: Instalasi Redis
Pastikan Anda telah menginstal Redis di server Anda. Anda bisa mengunduhnya dari situs web Redis. Kemudian install predis menggunakan composer :
composer require predis/predis
Langkah 2: Konfigurasi Koneksi Redis
Buat file konfigurasi untuk koneksi Redis Anda. Contohnya, config/redis.php:
<?php
return [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
];
Langkah 3: Implementasi Caching di Route API
Berikut adalah contoh bagaimana Anda dapat mengimplementasikan caching di salah satu route API Anda:
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\App;
use Predis\Client;
require __DIR__ . '/../vendor/autoload.php';
$app = new App();
$redisConfig = require __DIR__ . '/../config/redis.php';
$redis = new Client($redisConfig);
$app->get('/products/{id}', function (Request $request, Response $response, array $args) use ($redis) {
$id = (int) $args['id'];
$cacheKey = 'product:' . $id;
// Coba ambil data dari cache
$cachedData = $redis->get($cacheKey);
if ($cachedData) {
// Data ditemukan di cache
$product = json_decode($cachedData);
$response->getBody()->write(json_encode($product));
return $response->withHeader('Content-Type', 'application/json');
}
// Data tidak ditemukan di cache, ambil dari database (simulasi)
// Gantilah dengan logika pengambilan data dari database Anda
$product = [
'id' => $id,
'name' => 'Product ' . $id,
'description' => 'Description of product ' . $id,
'price' => rand(10, 100),
];
// Simpan data ke cache selama 60 detik
$redis->setex($cacheKey, 60, json_encode($product));
$response->getBody()->write(json_encode($product));
return $response->withHeader('Content-Type', 'application/json');
});
$app->run();
Penjelasan Kode:
$cacheKey = 'product:' . $id;: Membuat kunci unik untuk setiap produk di cache.$redis->get($cacheKey);: Mencoba mengambil data dari cache Redis.$redis->setex($cacheKey, 60, json_encode($product));: Menyimpan data ke cache Redis selama 60 detik.Langkah 4: Opcode Caching
Aktifkan Opcode Caching seperti OpCache (yang built-in di PHP 5.5 ke atas) di server Anda. Ini akan secara signifikan meningkatkan kinerja eksekusi script PHP Anda. Pastikan OpCache diaktifkan di file php.ini Anda:
opcache.enable=1
Implementasikan cache invalidation di API Anda. Ketika data produk di database diubah (misalnya, melalui endpoint PUT atau PATCH), hapus data produk tersebut dari cache Redis.