Menggunakan Memcached untuk Caching Data PHP di ServBay
ServBay, sebagai persekitaran pembangunan web tempatan yang berkuasa, telah siap sedia dengan pakej Memcached Server berprestasi tinggi serta sambungan PHP terkait. Ini memudahkan pembangun untuk melaksanakan caching data secara efisien dalam aplikasi PHP, seterusnya meningkatkan prestasi aplikasi anda secara ketara.
Dokumen ini akan menerangkan secara terperinci cara mengesahkan dan menggunakan Memcached serta sambungan PHP yang bersesuaian dalam ServBay.
Pengenalan Memcached
Memcached ialah sistem cache objek memori teragih berprestasi tinggi. Ia menyimpan data secara sementara di dalam memori (seperti hasil pertanyaan pangkalan data, respons panggilan API, serpihan halaman dan lain-lain), lalu mengurangkan jumlah akses ke storan data backend (seperti pangkalan data). Hasilnya, ia mempercepatkan respons dan throughput aplikasi web dinamik anda.
Ciri-ciri Utama
- Prestasi Tinggi: Data disimpan di dalam memori, membolehkan kelajuan bacaan dan penulisan yang amat pantas.
- Teragih: Sokongan untuk membina pool cache teragih merentasi beberapa pelayan; mudah untuk diskalakan.
- Mudah Digunakan: Protokol yang ringkas, pelbagai pustaka klien tersedia, mudah diintegrasi.
- Mengurangkan Beban Pangkalan Data: Secara berkesan menurunkan tekanan pertanyaan kepada pangkalan data, khususnya dalam situasi trafik tinggi.
Perbezaan antara sambungan PHP memcache
dan memcached
Dalam PHP, terdapat dua sambungan utama yang digunakan untuk berhubung dengan pelayan Memcached: memcache
dan memcached
. Walaupun namanya hampir sama, kedua-duanya adalah sambungan yang berbeza dengan API dan ciri tersendiri:
Sambungan
memcache
:- Salah satu sambungan PHP terawal.
- Menyediakan API berorientasikan prosedur (
memcache_connect()
,memcache_set()
, dan sebagainya). - Fungsi agak asas, tidak menyokong beberapa ciri lanjutan seperti konsistensi hash (walaupun ada klien tertentu yang menambahkannya).
Sambungan
memcached
:- Sambungan PHP yang lebih baru (disokong oleh pustaka libmemcached).
- Menyediakan API berorientasikan objek (kelas
Memcached
). - Menyokong lebih banyak ciri canggih seperti konsistensi hash, protokol binari, autentikasi SASL, dan pelbagai pilihan serialization.
- Biasanya penggunaan sambungan
memcached
lebih digalakkan kerana ia lebih lengkap serta dikekalkan secara aktif.
ServBay secara lalai menyediakan dan mencadangkan penggunaan sambungan PHP memcached
yang lebih kaya ciri.
Pakej Memcached dan Sambungan PHP dalam ServBay
ServBay bukan sahaja menyepadukan pelayan Memcached sebagai pakej boleh diurus, malah turut memasang dan mengaktifkan secara lalai sambungan PHP memcached
untuk setiap versi PHP yang disokongnya.
Ini bermakna dalam kebanyakan kes, sebaik sahaja anda memasang ServBay, kedua-dua pelayan Memcached dan sambungan PHP sudah tersedia tanpa perlu kompilasi atau konfigurasi tambahan.
Sahkan Status Pakej Memcached:
Anda boleh menemui pakej Memcached
melalui antara muka utama ServBay atau laman pengurusan pakej dan pastikan statusnya "Sedang Berjalan". Jika belum berjalan, cuba untuk memulakannya.
Sahkan sambungan PHP memcached
telah dimuatkan:
Untuk memastikan sambungan memcached
telah dimuatkan untuk versi PHP tertentu, kaedah paling mudah adalah mengguna fungsi phpinfo()
:
Cipta fail PHP baharu (cth.
info.php
) dalam direktori root laman ServBay (lalai:/Applications/ServBay/www
).Masukkan kod berikut ke dalam fail tersebut:
php<?php phpinfo(); ?>
1
2
3Akses fail ini melalui laman lokal yang dikonfigurasikan oleh ServBay (cth. jika domain laman anda ialah
servbay.demo
, lawatihttp://servbay.demo/info.php
).Dalam laman
phpinfo
yang dipaparkan, cari bahagian bertajuk "memcached". Jika wujud dan memaparkan maklumat konfigurasi serta nombor versi, sambungan tersebut telah berjaya dimuatkan dan boleh digunakan.
Menggunakan Memcached dalam Kod PHP
Selepas memastikan pelayan Memcached berjalan dan sambungan PHP memcached
telah dimuatkan, anda boleh menggunakan kelas Memcached
dalam aplikasi PHP untuk bersambung ke pelayan serta menjalankan operasi caching.
Secara lalai, pelayan Memcached berjalan di localhost
pada port standard 11211
.
Contoh Kod
Berikut ialah contoh ringkas kod PHP yang menunjukkan cara menggunakan kelas Memcached
untuk berhubung ke pelayan Memcached tempatan serta melaksanakan operasi set dan get data:
Simpan kod berikut sebagai satu fail PHP dalam direktori laman ServBay, contohnya /Applications/ServBay/www/memcached_test.php
:
php
<?php
// Maklumat pelayan Memcached
$memcached_host = 'localhost';
$memcached_port = 11211;
// Cipta instance klien Memcached
$memcached = new Memcached();
// Tambah pelayan Memcached ke pool sambungan klien
// Kaedah addServer() mengembalikan boolean menandakan berjaya ditambah ke senarai, tidak semestinya sambungan berjaya
if (!$memcached->addServer($memcached_host, $memcached_port)) {
// Nota: Kegagalan addServer biasanya adalah isu konfigurasi, bukan pelayan tidak dapat diakses
die("Tidak dapat menambah pelayan Memcached ke senarai sambungan klien. Sila semak konfigurasi host dan port.");
}
// Cuba dapatkan kunci yang tidak wujud untuk menguji sambungan (pilihan, tetapi digalakkan)
// get() mengembalikan false atau array kosong jika kunci tidak wujud atau terdapat masalah sambungan
// Memcached::getResultCode() dapatkan kod status lebih terperinci
$test_key = 'servbay_memcached_connection_test';
$memcached->get($test_key); // Cuba dapatkan kunci yang tidak wujud
$result_code = $memcached->getResultCode();
if ($result_code !== Memcached::RES_NOTFOUND && $result_code !== Memcached::RES_SUCCESS) {
// Jika bukan RES_NOTFOUND atau RES_SUCCESS, kemungkinan terdapat masalah sambungan
// Nota: RES_SUCCESS boleh juga bermaksud dapatkan nilai kosong
// Pemeriksaan sambungan lebih ketat mungkin memerlukan logik tambahan atau bergantung pada kelakuan klien
// Untuk pembangunan tempatan, biasanya cukup addServer berjaya serta tiada ralat operasi seterusnya
echo "Perhatian: Mungkin terdapat isu semasa menyambung ke pelayan Memcached. Result Code: " . $result_code . "<br>";
// Pada aplikasi sebenar, mungkin perlukan pengendalian ralat lebih terperinci
} else {
echo "Berjaya disambungkan ke pelayan Memcached ({$memcached_host}:{$memcached_port}).<br>";
}
// --- Contoh operasi caching ---
// Data untuk dicache
$key = 'user_profile_1234';
$data = [
'id' => 1234,
'username' => 'servbay-demo',
'email' => '[email protected]',
'status' => 'active'
];
$expiration = 3600; // Masa akhir luput cache, dalam saat (1 jam)
// Set data ke cache
// Kaedah set() pulangkan boolean menandakan operasi berjaya
if ($memcached->set($key, $data, $expiration)) {
echo "Data berjaya dicache ke Memcached, kunci '{$key}', luput dalam {$expiration} saat.<br>";
} else {
echo "Gagal cache data!<br>";
// Boleh dapatkan punca kegagalan melalui $memcached->getResultCode()
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Cuba dapatkan data daripada cache
echo "Cuba mendapatkan data daripada cache...<br>";
$cachedData = $memcached->get($key);
if ($cachedData !== false) { // Memcached::get() pulang false jika tiada cache atau gagal
echo "Data berjaya diperoleh daripada cache:<br>";
echo "<pre>";
print_r($cachedData);
echo "</pre>";
} else {
echo "Cache tidak dijumpai atau gagal diperoleh, kunci '{$key}'.<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Contoh sekiranya cache tamat tempoh (anggap masa telah berlalu)
// Biasanya anda akan semak sama ada $cachedData ialah false, kemudian jika ya, data diambil dari sumber asal (contohnya pangkalan data) sebelum mencache semula.
// Contoh: Hapus data cache
/*
echo "Mencuba untuk hapus data cache...<br>";
if ($memcached->delete($key)) {
echo "Data berjaya dihapus dari cache, kunci '{$key}'.<br>";
} else {
echo "Gagal menghapus data cache!<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
// Cuba dapatkan semula data yang telah dipadam
echo "Cuba dapatkan semula data yang telah dihapus...<br>";
$cachedDataAfterDelete = $memcached->get($key);
if ($cachedDataAfterDelete !== false) {
echo "Data ditemui (penghapusan gagal):<br>";
print_r($cachedDataAfterDelete);
} else {
echo "Data tidak lagi dalam cache (seperti yang dijangka).<br>";
echo "Result Code: " . $memcached->getResultCode() . "<br>";
}
*/
// Contoh: Kosongkan semua cache (guna dengan berhati-hati!)
/*
echo "Mencuba untuk kosongkan semua cache...<br>";
if ($memcached->flush()) {
echo "Semua data cache telah dikosongkan.<br>";
} else {
echo "Gagal kosongkan 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 fail memcached_test.php
melalui laman lokal yang dikonfigurasikan dalam ServBay dan anda akan melihat hasil keluaran status sambungan, set dan dapat data cache.
Perhatian
- Pastikan pakej Memcached dalam ServBay berada dalam status sedang berjalan.
- Secara lalai, Memcached mendengar pada alamat
127.0.0.1
(ataulocalhost
) di port11211
. Biasanya tidak perlu diubah. - Jika sambungan PHP ke Memcached gagal, semak status pakej Memcached serta pastikan tiada firewall yang menghalang sambungan tempatan.
- Kaedah
addServer
kelasMemcached
hanya menambah pelayan ke pool pelayan calon; ia sendiri tidak membuat sambungan kekal mahupun menguji kebolehcapaian segera. Sambungan sebenar hanya berlaku sewaktu operasi sepertiget
,set
dan sebagainya dijalankan. Anda boleh tentukan kejayaan sambungan dengan memeriksa nilai pulangan ataugetResultCode()
.
Rumusan
ServBay menawarkan cara yang amat mudah untuk pembangun menggunakan Memcached. Dengan integrasi pakej Memcached dan sambungan PHP memcached
yang telah dipra-pasang dan diaktifkan secara lalai, anda tidak perlu melalui proses pemasangan atau konfigurasi yang rumit. Teruskan memanfaatkan Memcached untuk caching data secara efisien dalam persekitaran pembangunan tempatan anda, dan bina asas kukuh bagi aplikasi PHP berprestasi tinggi.