Menggunakan Memcached untuk Caching Data PHP di ServBay
ServBay adalah lingkungan pengembangan web lokal yang kuat, sudah dibekali dengan paket perangkat lunak Memcached server berkinerja tinggi beserta ekstensi PHP terkait. Hal ini memudahkan developer menerapkan caching data yang efisien pada aplikasi PHP, sehingga performa aplikasi meningkat secara signifikan.
Artikel ini akan memandu Anda secara detail tentang cara memeriksa dan menggunakan Memcached serta ekstensi PHP yang sesuai di ServBay.
Sekilas Tentang Memcached
Memcached adalah sistem cache objek memori terdistribusi dengan performa tinggi. Dengan menyimpan data secara sementara di memori (misal: hasil query database, respons API, bagian halaman, dll), Memcached mengurangi frekuensi akses ke penyimpanan backend (seperti database), sehingga dapat mempercepat respons dan throughput aplikasi web dinamis.
Fitur Utama
- Performa Tinggi: Data disimpan di memori sehingga sangat cepat untuk baca/tulis.
- Terdistribusi: Mendukung pembuatan pool cache terdistribusi antar beberapa server—mudah untuk diperluas.
- Sederhana dan Mudah Digunakan: Protokol sederhana, pustaka klien beragam, integrasi mudah.
- Mengurangi Beban Database: Secara efektif menurunkan beban query ke database, terutama pada situasi trafik tinggi.
Perbedaan Ekstensi PHP memcache
dan memcached
Di PHP, ada dua ekstensi populer untuk berkomunikasi dengan server Memcached: memcache
dan memcached
. Walau namanya mirip, keduanya adalah ekstensi berbeda dengan API dan fitur tersendiri:
Ekstensi
memcache
:- Ekstensi PHP yang lebih lama.
- Utamanya menyediakan API prosedural (
memcache_connect()
,memcache_set()
, dsb). - Fitur cukup dasar dan belum mendukung beberapa fitur lanjutan, seperti konsistensi hashing (meski sebagian client library memilikinya).
Ekstensi
memcached
:- Ekstensi PHP yang lebih baru (dibangun di atas pustaka libmemcached).
- Menyediakan API berbasis objek (class
Memcached
). - Mendukung lebih banyak fitur lanjutan: konsistensi hashing, protokol biner, autentikasi SASL, opsi serialisasi yang lebih fleksibel, dll.
- Umumnya direkomendasikan memakai ekstensi
memcached
karena lebih powerful dan lebih aktif dikembangkan.
ServBay secara default menyediakan dan merekomendasikan penggunaan ekstensi PHP memcached
yang lebih lengkap.
Paket Memcached dan Ekstensi PHP di ServBay
ServBay telah mengintegrasikan server Memcached sebagai paket perangkat lunak yang dapat dimanajemen, serta memasang dan mengaktifkan ekstensi memcached
pada setiap versi PHP yang disediakan secara default.
Artinya, setelah menginstal ServBay, biasanya server Memcached dan ekstensi PHP-nya sudah siap digunakan tanpa perlu kompilasi atau konfigurasi tambahan.
Periksa Status Paket Memcached:
Anda bisa menemukan paket Memcached
di antarmuka utama atau menu manajemen paket ServBay, dan pastikan statusnya “Sedang Berjalan”. Jika belum berjalan, silakan coba untuk menyalakannya.
Periksa Apakah Ekstensi memcached
PHP Sudah Aktif:
Cara termudah untuk memverifikasi apakah ekstensi memcached
sudah dimuat pada versi PHP tertentu adalah dengan menggunakan fungsi phpinfo()
:
Buat file PHP baru di root website ServBay Anda (default:
/Applications/ServBay/www
), misalinfo.php
.Tambahkan kode berikut ke file tersebut:
php<?php phpinfo(); ?>
1
2
3Akses file tersebut melalui domain lokal yang telah Anda atur di ServBay (misal jika domain lokal Anda
servbay.demo
, kunjungihttp://servbay.demo/info.php
).Pada halaman
phpinfo
yang muncul, cari bagian berjudul "memcached". Jika bagian tersebut ada beserta info konfigurasi dan versi, berarti ekstensi sudah aktif dan siap digunakan.
Menggunakan Memcached dalam Kode PHP
Setelah memastikan server Memcached berjalan dan ekstensi PHP memcached
sudah diaktifkan, Anda bisa mulai menggunakan class Memcached
di aplikasi PHP untuk mengakses server dan melakukan operasi cache.
Secara default, server Memcached berjalan di localhost
pada port standar 11211
.
Contoh Kode
Berikut contoh kode PHP sederhana yang memperlihatkan cara menggunakan class Memcached
untuk terhubung ke server Memcached lokal dan melakukan setting serta pengambilan data:
Simpan kode berikut sebagai file PHP di direktori website ServBay Anda (misal /Applications/ServBay/www/memcached_test.php
):
php
<?php
// Informasi server Memcached
$memcached_host = 'localhost';
$memcached_port = 11211;
// Membuat instance client Memcached
$memcached = new Memcached();
// Menambahkan server Memcached ke pool koneksi client
// Metode addServer() mengembalikan boolean untuk menunjukkan apakah server berhasil ditambahkan ke daftar, bukan berarti sudah terhubung
if (!$memcached->addServer($memcached_host, $memcached_port)) {
// Catatan: addServer gagal biasanya karena masalah konfigurasi, bukan server tidak bisa dihubungi
die("Tidak dapat menambahkan server Memcached ke daftar koneksi client. Silakan periksa pengaturan host dan port.");
}
// Tes ambil key yang tidak ada untuk menguji koneksi (opsional namun direkomendasikan)
// get() mengembalikan false atau array kosong bila key tidak ditemukan atau terjadi masalah koneksi
// Memcached::getResultCode() dapat memberikan kode status lebih detail
$test_key = 'servbay_memcached_connection_test';
$memcached->get($test_key); // Coba ambil key yang tidak ada
$result_code = $memcached->getResultCode();
if ($result_code !== Memcached::RES_NOTFOUND && $result_code !== Memcached::RES_SUCCESS) {
// Jika bukan RES_NOTFOUND atau RES_SUCCESS, mungkin ada masalah koneksi
// Catatan: RES_SUCCESS bisa muncul saat mengambil value kosong
// Pemeriksaan koneksi lebih ketat butuh logika tambahan atau tergantung perilaku client tertentu
// Untuk pengembangan lokal, umumnya addServer sukses dan operasi berikutnya tidak error, sudah cukup menandakan koneksi normal
echo "Catatan: Mungkin ada masalah saat menghubungkan ke server Memcached. Result Code: " . $result_code . "<br>";
// Pada aplikasi nyata bisa ditambah penanganan error lebih detail
} else {
echo "Berhasil terhubung ke server Memcached ({$memcached_host}:{$memcached_port}).<br>";
}
// --- Contoh operasi cache ---
// Data yang ingin disimpan ke cache
$key = 'user_profile_1234';
$data = [
'id' => 1234,
'username' => 'servbay-demo',
'email' => '[email protected]',
'status' => 'active'
];
$expiration = 3600; // Waktu kedaluwarsa cache, dalam detik (contoh: 1 jam)
// Menyimpan data ke cache
// Metode set() mengembalikan boolean, menandakan berhasil atau gagal
if ($memcached->set($key, $data, $expiration)) {
echo "Data berhasil disimpan ke Memcached, key '{$key}', kadaluarsa dalam {$expiration} detik.<br>";
} else {
echo "Gagal menyimpan data ke cache!<br>";
// Bisa cek penyebab kegagalan via $memcached->getResultCode()
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Mencoba mengambil data dari cache
echo "Mencoba mengambil data dari cache...<br>";
$cachedData = $memcached->get($key);
if ($cachedData !== false) { // Memcached::get() mengembalikan false saat cache miss atau kegagalan
echo "Berhasil mengambil data dari cache:<br>";
echo "<pre>";
print_r($cachedData);
echo "</pre>";
} else {
echo "Cache miss atau gagal mengambil data, key '{$key}'.<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Contoh bagaimana jika cache kadaluarsa (misal waktu sudah berlalu)
// Umumnya di aplikasi nyata, cek $cachedData apakah false, bila ya, ambil dari sumber asli (database), lalu simpan lagi ke cache.
// Contoh: menghapus data dari cache
/*
echo "Mencoba menghapus data cache...<br>";
if ($memcached->delete($key)) {
echo "Data berhasil dihapus dari cache, key '{$key}'.<br>";
} else {
echo "Gagal menghapus data cache!<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Coba ambil lagi data yang sudah dihapus
echo "Mencoba lagi mengambil data yang sudah dihapus...<br>";
$cachedDataAfterDelete = $memcached->get($key);
if ($cachedDataAfterDelete !== false) {
echo "Data masih ada (gagal dihapus):<br>";
print_r($cachedDataAfterDelete);
} else {
echo "Data sudah tidak ada di cache (sesuai harapan).<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
*/
// Contoh: flush seluruh cache (hati-hati!)
/*
echo "Mencoba menghapus semua cache...<br>";
if ($memcached->flush()) {
echo "Semua data cache telah dihapus.<br>";
} else {
echo "Gagal membersihkan cache!<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
*/
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Akses file memcached_test.php
melalui domain lokal yang sudah Anda atur di ServBay, maka Anda akan melihat status koneksi serta hasil proses setting dan pengambilan data.
Hal-hal yang Perlu Diperhatikan
- Pastikan paket Memcached di ServBay sedang berjalan.
- Secara default, Memcached mendengarkan di
127.0.0.1
(ataulocalhost
) pada port11211
. Biasanya tidak perlu diubah. - Jika gagal terhubung ke Memcached di PHP, periksa status paket Memcached dan pastikan tidak ada firewall yang memblokir koneksi lokal.
- Metode
addServer
pada classMemcached
hanya menambahkan server ke pool, tidak langsung membuat koneksi permanen atau memeriksa ketersediaan server saat itu juga. Koneksi/operasi sebenarnya baru terjadi saatget
,set
, dan metode lain dipanggil. Anda bisa mengecek sukses atau gagal melalui nilai return ataugetResultCode()
.
Kesimpulan
ServBay memberikan cara yang sangat mudah bagi developer untuk memanfaatkan Memcached. Dengan server Memcached yang sudah terintegrasi dan ekstensi PHP memcached
yang sudah terpasang serta aktif secara default, Anda bisa langsung menggunakan caching data yang efisien dalam lingkungan pengembangan lokal tanpa proses instalasi atau konfigurasi yang rumit. Ini menjadi pondasi kokoh untuk membangun aplikasi PHP yang berkinerja tinggi.