Penggunaan dan Pengurusan Cache Memcached dalam ServBay
Memcached ialah sistem cache objek memori yang diedarkan berprestasi tinggi, direka untuk mengurangkan beban pada pangkalan data dan perkhidmatan backend dengan menyimpan hasil carian pangkalan data, respons API, data sesi, dan data kerap digunakan lain dalam cache, sekali gus mempercepatkan respons aplikasi web dinamik. Ia menyimpan data dalam bentuk pasangan kunci-nilai, dan semua data disimpan dalam RAM untuk kependaman capaian yang sangat rendah.
Sebagai satu persekitaran pembangunan web tempatan yang berkuasa, ServBay menyediakan perkhidmatan Memcached secara terbina dan bersepadu, membolehkan pembangun menggunakan caching memori dengan mudah dalam timbunan pembangunan tempatan mereka. Dokumen ini menerangkan secara terperinci cara mengurus dan menggunakan Memcached dalam ServBay, termasuk cara mengaktifkan, operasi asas, kaedah sambungan, tetapan konfigurasi, serta beberapa saranan penggunaan.
Pemasangan dan Konfigurasi Memcached
Memcached disediakan bersama ServBay, tanpa perlu pemasangan berasingan. Ia adalah salah satu pakej teras dalam ServBay.
Mengaktifkan dan Mengurus Pakej Memcached
Anda boleh mengurus status operasi pakej Memcached (memulakan, memberhentikan, memulakan semula) melalui platform pengurusan grafik ServBay atau menggunakan alatan baris arahan servbayctl
.
Menggunakan Platform Pengurusan ServBay
- Buka Platform Pengurusan ServBay.
- Navigasi ke menu kiri 'Pakej'.
- Cari 'Memcached' di bawah kategori
NoSQL
dalam senarai pakej. - Di sini, anda boleh dengan mudah memulakan, memberhentikan, atau memulakan semula perkhidmatan Memcached.
Menggunakan Alat Baris Arahan servbayctl
Untuk pembangun yang biasa dengan terminal, anda boleh mengurus perkhidmatan Memcached menggunakan perintah servbayctl
.
bash
# Memulakan perkhidmatan Memcached
servbayctl start memcached -all
# Memberhentikan perkhidmatan Memcached
servbayctl stop memcached -all
# Memulakan semula perkhidmatan Memcached
servbayctl restart memcached -all
# Melihat status perkhidmatan Memcached
servbayctl status memcached -all
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Nota: arahan servbayctl
biasanya diaplikasikan kepada versi Memcached aktif semasa dalam ServBay.
Konfigurasi Memcached
ServBay menawarkan antara muka grafik yang mesra pengguna untuk konfigurasi Memcached bagi mengelakkan kesulitan mengubah fail konfigurasi secara manual. Anda boleh menyesuaikan parameter Memcached seperti had maksimum memori, alamat pendengaran, dan nombor port melalui platform pengurusan ServBay.
Sila rujuk dokumen Ubah Suai Konfigurasi Memcached untuk maklumat lanjut tentang memodifikasi dan mengoptimumkan tetapan Memcached dalam ServBay. Penyesuaian parameter ini sangat penting untuk prestasi dan penggunaan sumber Memcached.
Sambungan ke Memcached
Secara lalai, Memcached mendengar pada port 11211
di localhost
. Anda boleh menyambung ke instans Memcached dengan pelbagai cara, termasuk alat baris arahan atau pustaka pelanggan dalam pelbagai bahasa pengaturcaraan.
Penggunaan Alat Baris Arahan untuk Sambungan
Anda boleh berinteraksi terus dengan perkhidmatan Memcached menggunakan alatan seperti telnet
atau nc
(netcat) untuk melaksanakan arahan protokol Memcached.
Sambungan menggunakan telnet:
bashtelnet localhost 11211
1Selepas sambungan berjaya, anda boleh terus menaip arahan Memcached seperti
version
untuk melihat versi ataustats
untuk statistik, dan taipquit
untuk keluar.Sambungan menggunakan nc:
bashnc localhost 11211
1Begitu juga, selepas bersambung, anda boleh terus memasukkan arahan Memcached. Tekan Ctrl+C untuk keluar.
Sambungan Melalui Pustaka Pelanggan Bahasa Pengaturcaraan
Kebanyakan bahasa pengaturcaraan utama menyediakan pustaka pelanggan Memcached yang matang untuk diintegrasikan ke dalam kod aplikasi anda.
Contoh Python
Bersambung ke Memcached menggunakan pustaka seperti pylibmc
(disyorkan, berasaskan libmemcached) atau python-memcached
:
Pertama, jika projek anda tidak menggunakan persekitaran maya, atau ingin memasang secara global, anda boleh memasang pustaka pelanggan dengan pip:
bash
pip install pylibmc
# atau
pip install python-memcached
1
2
3
2
3
Kemudian, sambungkan dan gunakan Memcached dalam kod Python anda:
python
import pylibmc
# Sambung ke perkhidmatan Memcached, tentukan hos dan port
# pylibmc secara lalai menggunakan port 11211
mc = pylibmc.Client(["localhost:11211"], binary=True)
# Menetapkan pasangan kunci-nilai
# set(key, value, time=0, min_compress_len=0)
# time=0 bermakna tidak akan luput (sehingga dipadam oleh dasar pengurusan memori Memcached)
mc.set("my_python_key", "Hello from Python!", time=3600) # Cache selama 1 jam
# Mendapatkan nilai kunci
value = mc.get("my_python_key")
if value:
print(f"Diperoleh dari Memcached: {value.decode('utf-8')}") # pylibmc mengembalikan bytes
else:
print("Kunci 'my_python_key' tidak wujud atau sudah tamat tempoh")
# Memadam pasangan kunci-nilai
mc.delete("my_python_key")
print("Kunci 'my_python_key' telah dipadam")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Contoh PHP
Pustaka pelanggan Memcached yang biasa digunakan dalam PHP ialah ekstensi Memcached
dan yang lebih lama, Memcache
. ServBay biasanya menyediakan ekstensi Memcached
.
Pastikan anda telah menghidupkan ekstensi Memcached
untuk versi PHP yang diperlukan dalam ServBay. Ini boleh diurus melalui antara muka konfigurasi PHP pada platform pengurusan ServBay.
Kemudian, sambungkan dan gunakan Memcached dalam kod PHP anda:
php
<?php
// Cipta instans klien Memcached
$memcached = new Memcached();
// Tambahkan pelayan Memcached ke pool sambungan
// addServer(host, port, weight=0)
$memcached->addServer("localhost", 11211);
// Semak sambungan berjaya (pilihan, klien selalunya 'lazy connect')
if (!$memcached->getStats()) {
echo "Tidak dapat menyambung ke pelayan Memcached! Sila pastikan perkhidmatan Memcached berjalan dan port adalah betul.\n";
// Tindakan susulan bergantung kepada keperluan aplikasi
} else {
echo "Berjaya menyambung ke pelayan Memcached.\n";
// Tetapkan pasangan kunci-nilai
// set(key, value, expiration=0)
// expiration=0 bermakna tidak akan luput (sehingga dipadam oleh dasar pengurusan memori Memcached)
$memcached->set("my_php_key", "Hello from PHP!", 3600); // Cache selama 1 jam
echo "Penetapan kunci 'my_php_key' berjaya.\n";
// Dapatkan nilai kunci
$value = $memcached->get("my_php_key");
if ($value !== false) {
echo "Diperoleh dari Memcached: " . $value . "\n";
} else {
// Memcached::get() memulangkan false jika kunci tiada atau berlaku ralat
// Gunakan getResultCode() untuk membezakan kunci tidak wujud atau ralat lain
if ($memcached->getResultCode() == Memcached::RES_NOTFOUND) {
echo "Kunci 'my_php_key' tidak wujud atau sudah tamat tempoh.\n";
} else {
echo "Ralat ketika mendapatkan 'my_php_key': " . $memcached->getResultMessage() . "\n";
}
}
// Padam pasangan kunci-nilai
if ($memcached->delete("my_php_key")) {
echo "Kunci 'my_php_key' telah dipadam.\n";
} else {
echo "Memadam kunci 'my_php_key' gagal.\n";
}
}
?>
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
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
Operasi Caching Data Memcached
Fungsi utama Memcached adalah penyimpanan dan pengurusan pasangan kunci-nilai menggunakan arahan ringkas. Memahami arahan asas ini adalah penting untuk menggunakan Memcached. Berikut contoh operasi asas yang boleh dilakukan melalui baris arahan (telnet
atau nc
).
Nota: Dalam pembangunan aplikasi sebenar, anda akan menggunakan pustaka klien bahasa pengaturcaraan yang membungkus arahan protokol asas ini.
Contoh Arahan Asas
Selepas bersambung ke Memcached (telnet localhost 11211
):
Tetapkan pasangan kunci-nilai (set): Digunakan untuk menyimpan satu pasangan kunci-nilai. Jika kunci sudah wujud, nilainya akan dikemas kini.
bashset mykey 0 900 11 Hello, Memcached!
1
2mykey
: Nama kunci.0
: Flags (tanda), integer tanpa tanda 32-bit, disimpan bersama data dan dikembalikan semasa mendapatkan data. Bebas digunakan oleh klien (cth, untuk tanda serialisasi).900
: Masa tamat tempoh (dalam saat).0
bermakna tidak akan luput (sehingga ruang memori tidak cukup), lebih 0 kurang dari 2592000 (30 hari) adalah tempoh masa relatif dari sekarang, lebih atau sama dengan 2592000 adalah cap waktu Unix.11
: Panjang data (bait). Masukkan data sebenar pada baris berikutnyaHello, Memcached!
. Jika berjaya, Memcached akan memulangkanSTORED
.
Tambah pasangan kunci-nilai (add): Menyimpan hanya jika kunci tidak wujud. Jika sudah ada, operasi gagal.
bashadd anotherkey 0 60 5 World
1
2Jika
anotherkey
tiada, balasanSTORED
; jika sudah ada, balasanNOT STORED
.Ganti pasangan kunci-nilai (replace): Hanya menyimpan jika kunci sudah wujud. Jika tiada, operasi gagal.
bashreplace mykey 0 300 18 New value for key!
1
2Jika
mykey
wujud, balasanSTORED
; jika tiada, balasanNOT STORED
.Dapatkan pasangan kunci-nilai (get): Dapatkan nilai berdasarkan nama kunci.
bashget mykey anotherkey
1Format balasan:
VALUE mykey 0 18 New value for key! VALUE anotherkey 0 5 World END
1
2
3
4
5END
menandakan akhir keluaran operasi get.Padam pasangan kunci-nilai (delete): Padam nilai berdasarkan nama kunci.
bashdelete mykey
1Jika berjaya, balasan
DELETED
; jika kunci tiada, balasanNOT FOUND
.
Pertimbangan Backup dan Pemulihan Data
Memahami prinsip kerja Memcached adalah kritikal: ia adalah sistem cache dalam memori. Ini bermakna data Memcached disimpan dalam RAM dan tidak menawarkan penyimpanan kekal atau mekanisme backup automatik secara terbina. Apabila perkhidmatan Memcached dihentikan, pelayan di-reboot, atau memori tidak cukup, data cache akan hilang.
Fungsi backup yang disediakan oleh ServBay (termasuk tetapan, laman web, pangkalan data, sijil SSL, dsb.) tertumpu kepada komponen yang mempunyai penyimpanan kekal, seperti fail data pangkalan data MySQL, PostgreSQL, konfigurasi ServBay, fail laman web, dan sijil SSL anda. Fungsi backup ini tidak termasuk data aktif dalam cache Memcached, kerana reka bentuk Memcached adalah sebagai lapisan cache volatil yang boleh dibina semula pada bila-bila masa.
Justeru, untuk Memcached, "backup dan pemulihan" biasanya merujuk kepada:
- Eksport data cache: Sekiranya perlu (cth debugging atau migrasi), anda boleh menulis skrip khusus untuk menyambung ke Memcached, mendapatkan kunci-kunci tertentu dan menyimpannya ke fail atau storan lain. Memandangkan tiada arahan terbina untuk 'traverse all keys' dalam Memcached demi prestasi, skrip sedemikian mungkin perlu menggunakan
stats cachedump
(dengan log terperinci) atau teknik lain, atau menjejaki nama kunci pada lapisan aplikasi. - Import data cache: Membaca semula data yang dieksport ke dalam Memcached, juga memerlukan skrip untuk menggunakan arahan
set
atauadd
.
Penting: Untuk kebanyakan aplikasi, data dalam Memcached boleh dibina semula daripada sumber data asal (seperti pangkalan data). Aplikasi mesti direka supaya mampu menangani kehilangan cache: jika data tidak ditemui dalam cache, aplikasi perlu mengambilnya daripada sumber asal (fallback), dan memilih untuk mengisi semula cache. Oleh itu, biasanya tidak perlu mengadakan proses backup/pemulihan khusus untuk data cache dalam Memcached.
Pengoptimuman Prestasi
Prestasi Memcached sangat bergantung pada konfigurasi dan cara penggunaannya. Dalam ServBay, anda boleh menyesuaikan parameter utama melalui antara muka grafik untuk mengoptimumkan prestasi Memcached:
Pengoptimuman Memori
Parameter utama ialah had maksimum memori yang diperuntukkan (-m
dalam konfigurasi).
- Tetapkan had memori dengan munasabah: Laraskan had maksimum memori Memcached melalui konfigurasi dalam ServBay. Memberikan memori yang mencukupi dapat mengurangkan pemadaman (eviction) cache dan meningkatkan kadar hit. Namun, penetapan terlalu tinggi boleh menjejaskan proses lain. Sesuaikan mengikut sumber dan keperluan cache anda.
Pengoptimuman Sambungan
Laraskan bilangan sambungan serentak maksimum (-c
dalam konfigurasi).
- Sesuaikan bilangan sambungan maksimum: Melalui antara muka konfigurasi ServBay, tetapkan maksimum sambungan serentak yang boleh diterima oleh Memcached. Jika aplikasi anda perlu membuat banyak permintaan serentak, tetapan sambungan yang lebih tinggi mengelakkan penantian dan meningkatkan throughput.
Saranan Pengoptimuman Lain
- Reka bentuk kunci: Gunakan nama kunci yang pendek dan jelas, elakkan terlalu panjang/rumit.
- Serialisasi nilai: Pilih kaedah serialisasi cekap (seperti JSON, MessagePack, Protocol Buffers) untuk struktur data kompleks, dengan pertimbangan kepada prestasi dan ruang simpanan.
- Strategi caching: Reka strategi kehabisan dan pengemaskinian cache yang sesuai, contohnya caching on read, kemas kini atau padam cache pada write, demi integriti dan kesegaran data.
- Kependaman rangkaian: Untuk pembangunan tempatan (
localhost
), kependaman rangkaian tidak signifikan, tetapi dalam produksi, letakkan pelayan Memcached sedekat mungkin dengan pelayan aplikasi anda untuk mengurangkan masa pusing balik rangkaian (RTT).
Pengurusan Keselamatan
Memcached tidak menawarkan ciri keselamatan terbina yang kuat, jadi adalah penting untuk melindungi perkhidmatan Memcached, terutamanya di luar persekitaran pembangunan tempatan. Dalam ServBay, perkhidmatan secara lalai hanya mendengar di rangkaian tempatan, jadi risiko rendah, namun pengetahuan berikut sangat bermanfaat:
Hadkan Alamat Mendengar
- Bind ke alamat tempatan: Melalui konfigurasi dalam ServBay, pastikan Memcached mendengar pada alamat loopback
127.0.0.1
ataulocalhost
(-l
). Ini adalah tetapan lalai ServBay dan memastikan tiada akses dari luar. Jangan dedahkan Memcached ke rangkaian awam tanpa langkah keselamatan sewajarnya!
Penggunaan Firewall
- Konfigurasi peraturan firewall: Meskipun ServBay secara lalai mengikat Memcached ke alamat tempatan, sebagai lapisan tambahan, gunakan firewall sistem operasi (cth firewall terbina macOS atau
pf
) untuk menghalang percubaan sambungan ke port Memcached (lalai 11211) dari rangkaian luar.
Pengesahan dan Penyulitan (Lanjutan)
Protokol Memcached tidak menyokong pengesahan atau penyulitan secara terbina. Jika memerlukan akses selamat di rangkaian tidak dipercayai:
- Sambungan SSH Tunnel: Gunakan SSH tunnel untuk menyulitkan komunikasi antara klien dan pelayan Memcached.
- VPN: Jalankan Memcached pada rangkaian yang hanya boleh diakses melalui VPN.
- Proxy: Letakkan proksi yang menyokong pengesahan dan penyulitan di hadapan pelayan Memcached.
Dalam pembangunan tempatan dengan ServBay, langkah-langkah lanjutan ini biasanya tidak diperlukan kerana perkhidmatan hanya boleh diakses secara lokal.
Soal Jawab dan Penyelesaian Masalah
Tidak Dapat Menyambung ke Memcached
- Isu: Aplikasi atau alat baris arahan tidak dapat menyambung ke
localhost:11211
. - Penyelesaian:
- Periksa status perkhidmatan Memcached: Buka platform pengurusan ServBay, navigasi ke 'Pakej' -> 'NoSQL' dan pastikan Memcached berjalan. Atau semak status melalui baris arahan
servbayctl status memcached
. Jika tidak berjalan, cuba mulakan. - Periksa port dan alamat mendengar: Sahkan alamat (
localhost
atau127.0.0.1
) dan port (11211
) yang digunakan oleh aplikasi/alat. Pastikan konfigurasi Memcached dalam ServBay memang mengikat ke127.0.0.1:11211
. - Periksa firewall: Sahkan firewall atau perisian keselamatan rangkaian tidak menyekat capaian ke port
11211
secara lokal.
- Periksa status perkhidmatan Memcached: Buka platform pengurusan ServBay, navigasi ke 'Pakej' -> 'NoSQL' dan pastikan Memcached berjalan. Atau semak status melalui baris arahan
Kadar Hit Cache Rendah
- Isu: Aplikasi sering gagal mendapatkan data dari Memcached (cache miss), menyebabkan permintaan kerap ke pangkalan data atau perkhidmatan lain.
- Penyelesaian:
- Semak strategi caching: Lihat kod aplikasi anda, semak seting caching (
set
dan masa tamatexptime
) dan logik capaian. Adakah tempoh cache terlalu pendek? Adakah cache dikemas kini atau dipadam apabila data berubah? - Periksa pengagihan memori: Adakah Memcached mempunyai cukup memori untuk data utama? Jika tidak, LRU (Least Recently Used) akan memadam data. Tingkatkan had memori melalui konfigurasi ServBay (
-m
) dan pantau bilanganevictions
dalam hasilstats
. - Analisis reka bentuk kunci: Pastikan kunci cache anda direka untuk mewakili data yang dicache dengan berkesan.
- Pantau statistik Memcached: Gunakan telnet untuk melaksanakan
stats
, dan lihat metrikget_hits
(hit),get_misses
(miss) dsb. Kadar hit cache =get_hits / (get_hits + get_misses)
. Kadar evict tinggi (evictions
) petanda kekurangan memori.
- Semak strategi caching: Lihat kod aplikasi anda, semak seting caching (
Rumusan
Memcached ialah penyelesaian cache memori yang mudah dan cekap, kritikal dalam meningkatkan prestasi aplikasi web. ServBay, dibina khas untuk pembangun, menyepadukan dan memudahkan pengurusan Memcached, membolehkan anda dengan mudah menggunakan Memcached dalam timbunan pembangunan tempatan anda.
Dengan antara muka grafik dan alat baris arahan servbayctl
, anda boleh mengurus perkhidmatan Memcached serta konfigurasi dengan mudah. Gabungkan kaedah sambungan, operasi asas, serta saranan prestasi dan keselamatan yang diterangkan dalam dokumen ini, anda dapat mengoptimumkan pembangunan dan ujian aplikasi secara tempatan. Ingat, memahami sifat cache memori Memcached amat penting untuk penggunaan dan reka bentuk strategi caching yang betul.