ServBay'de Memcached Önbelleğini Kullanma ve Yönetme
Memcached, yüksek performanslı dağıtık bir bellek nesnesi önbellekleme sistemidir. Sık kullanılan verileri—veritabanı sorgu sonuçları, API yanıtları, oturum verileri vb.—önbelleğe alarak, veritabanı ve arka uç servislerinin yükünü önemli ölçüde hafifletir, böylece dinamik web uygulamalarının yanıt hızını artırır. Memcached, verileri anahtar-değer çiftleri olarak tamamen RAM'de saklar ve son derece düşük erişim gecikmeleri sağlar.
ServBay, güçlü bir yerel web geliştirme ortamı olarak, Memcached hizmetini yerleşik ve entegre şekilde sunarak geliştiricilerin yerel geliştirme yığınlarında bellek önbelleğini kullanmalarını kolaylaştırır. Bu belge, ServBay'de Memcached'i nasıl etkinleştireceğiniz, temel işlemleri ve bağlantı kurma yöntemleri, yapılandırma ile bazı kullanım önerileri dahil olmak üzere Memcached'in yönetimi ve kullanımı hakkında ayrıntılı bilgi sunar.
Memcached'in Kurulumu ve Yapılandırılması
ServBay, Memcached ile birlikte gelir; ek bir kurulum gerektirmez. Memcached, ServBay'in temel paketlerinden biri olarak sunulmaktadır.
Memcached Paketini Etkinleştirme ve Yönetme
Memcached paketinin durumunu (başlatma, durdurma, yeniden başlatma) ServBay'in grafiksel yönetim paneli veya servbayctl adlı komut satırı aracı ile yönetebilirsiniz.
ServBay Yönetim Panelini Kullanma
- ServBay yönetim platformunu açın.
- Sol menüden
Paketlerbölümüne gidin. - Paket listesinde,
NoSQLkategorisinin altındakiMemcachedseçeneğini bulun. - Buradan Memcached servisini kolayca başlatabilir, durdurabilir veya yeniden başlatabilirsiniz.
servbayctl Komut Satırı Aracını Kullanma
Terminal kullanmayı tercih eden geliştiriciler, Memcached'i aşağıdaki komutlarla yönetebilir:
bash
# Memcached servisini başlatma
servbayctl start memcached -all
# Memcached servisini durdurma
servbayctl stop memcached -all
# Memcached servisini yeniden başlatma
servbayctl restart memcached -all
# Memcached hizmet durumunu görüntüleme
servbayctl status memcached -all1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Not: servbayctl komutları genellikle ServBay'de etkin olan Memcached sürümü üzerinde çalışır.
Memcached'i Yapılandırma
ServBay, Memcached yapılandırmasını kolaylaştıran kullanıcı dostu bir grafik arayüzü sunar; karmaşık yapılandırma dosyalarını manuel olarak düzenlemeniz gerekmez. Memcached'in maksimum bellek limiti, dinlenecek adres, port gibi ayarlarını ServBay yönetim paneli üzerinden ayarlayabilirsiniz.
Memcached yapılandırmasını nasıl değiştireceğiniz ve optimize edeceğiniz hakkında daha fazla bilgi için Memcached Yapılandırmasını Değiştirme belgesini inceleyin. Bu parametrelerin doğru şekilde düzenlenmesi, Memcached'in performansı ve kaynak kullanımı için çok önemlidir.
Memcached'e Bağlanma
Memcached varsayılan olarak localhost üzerindeki 11211 portunda dinler. Memcached örneğine komut satırı araçları veya farklı programlama dilleri için mevcut istemci kütüphaneleriyle çeşitli şekillerde bağlanabilirsiniz.
Komut Satırı Aracı ile Bağlantı
telnet veya nc (netcat) gibi araçlarla Memcached servisine doğrudan bağlanıp Memcached protokol komutları çalıştırabilirsiniz.
telnet ile bağlanma:
bashtelnet localhost 112111Bağlantı kurulduktan sonra,
version(sürümü kontrol etme) veyastats(istatistikleri görme) gibi Memcached komutlarını doğrudan yazabilirsiniz. Çıkmak içinquityazın.nc ile bağlanma:
bashnc localhost 112111Benzer şekilde, bağlantıdan sonra komutları doğrudan girebilirsiniz. Çıkmak için Ctrl+C'yi kullanın.
Programlama Dili İstemcileri ile Bağlantı
Çoğu popüler programlama dili için olgunlaşmış Memcached istemci kütüphaneleri mevcuttur ve uygulama kodunuzda Memcached'i kolayca entegre edebilirsiniz.
Python Örneği
pylibmc (tavsiye edilir, libmemcached tabanlı) veya python-memcached gibi kütüphaneler kullanılabilir:
Öncelikle, projenizde sanal ortam kullanmıyorsanız veya genel kurulum istiyorsanız, ilgili istemci paketini aşağıdaki gibi yükleyebilirsiniz:
bash
pip install pylibmc
# veya
pip install python-memcached1
2
3
2
3
Sonrasında, aşağıdaki gibi Memcached'e bağlanıp kullanabilirsiniz:
python
import pylibmc
# Memcached servisine bağlanın, host ve port belirtin
# pylibmc varsayılan portu 11211'dir
mc = pylibmc.Client(["localhost:11211"], binary=True)
# Anahtar-değer çifti ekleme
# set(key, value, time=0, min_compress_len=0)
# time=0, veri hiç bir zaman süresi dolmaz anlamına gelir (bellek politikasıyla silinene kadar)
mc.set("my_python_key", "Hello from Python!", time=3600) # 1 saat önbellekle
# Anahtar-değer çifti okuma
value = mc.get("my_python_key")
if value:
print(f"Memcached'den alınan değer: {value.decode('utf-8')}")
else:
print("'my_python_key' anahtarı yok veya süresi dolmuş")
# Anahtar-değer çifti silme
mc.delete("my_python_key")
print("'my_python_key' anahtarı silindi")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
PHP Örneği
PHP'de yaygın olarak kullanılan Memcached istemcisi Memcached eklentisidir (ve eski sürümler için Memcache). ServBay'de genellikle Memcached uzantısı sunulur.
Öncelikle, ihtiyacınız olan PHP sürümü için ServBay'de Memcached uzantısının etkin olduğundan emin olun. Bunu ServBay yönetim panelinde PHP ayarlarından yönetebilirsiniz.
Sonrasında, şu şekilde kullanabilirsiniz:
php
<?php
// Memcached istemci örneği oluşturma
$memcached = new Memcached();
// Memcached sunucusunu bağlantı havuzuna ekleme
// addServer(host, port, weight=0)
$memcached->addServer("localhost", 11211);
// Bağlantıyı kontrol etme (isteğe bağlı)
if (!$memcached->getStats()) {
echo "Memcached sunucusuna bağlanılamıyor! Lütfen Memcached servisi çalışıyor mu ve port doğru mu kontrol edin.\n";
// Uygulamanıza göre hata işleyin
} else {
echo "Memcached sunucusuna başarıyla bağlanıldı.\n";
// Anahtar-değer çifti ekleme
// set(key, value, expiration=0)
// expiration=0, veri hiç bir zaman süresi dolmaz (bellek politikası silene kadar)
$memcached->set("my_php_key", "Hello from PHP!", 3600); // 1 saat önbellekle
echo "'my_php_key' anahtarı başarıyla ayarlandı.\n";
// Anahtar-değer çifti okuma
$value = $memcached->get("my_php_key");
if ($value !== false) {
echo "Memcached'den alınan değer: " . $value . "\n";
} else {
// Memcached::get() yoksa veya hata varsa false döner
// getResultCode() ile nedenini ayırt edebilirsiniz
if ($memcached->getResultCode() == Memcached::RES_NOTFOUND) {
echo "'my_php_key' anahtarı mevcut değil veya süresi doldu.\n";
} else {
echo "'my_php_key' alınırken hata oluştu: " . $memcached->getResultMessage() . "\n";
}
}
// Anahtar-değer çifti silme
if ($memcached->delete("my_php_key")) {
echo "'my_php_key' anahtarı silindi.\n";
} else {
echo "'my_php_key' anahtarı silinemedi.\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
Memcached Veri Önbellekleme İşlemleri
Memcached'in temel fonksiyonu basit komutlarla anahtar-değer çiftlerinin saklanması ve yönetilmesine dayanır. Bu temel komutları anlamak Memcached kullanımı için kritiktir. Aşağıda, komut satırından (telnet veya nc) kullanılabilecek temel işlemler örneklenmektedir.
Not: Gerçek uygulamada, bu işlemler için genellikle istemci kütüphaneleri kullanılır, böylece protokol ayrıntılarıyla uğraşmanız gerekmez.
Temel Komutlara Örnekler
Memcached'e (telnet localhost 11211) bağlandıktan sonra:
Anahtar-değer çifti ekleme (set): Var olan bir anahtarın değeri güncellenir veya yeni anahtar eklenir.
bashset mykey 0 900 11 Hello, Memcached!1
2mykey: Anahtar adı.0: Bayraklar, 32 bit imzasız bir sayı. Datanızla birlikte saklanır ve döndürülür.900: Zaman aşımı süresi (saniye);0asla silinmez (bellek dolana kadar), 0–2592000 arasında ise şimdiye göre saniye olarak, daha büyükse Unix zaman damgası.11: Verinin bayt cinsinden uzunluğu. Sonraki satırda veriyi (Hello, Memcached!) girin; ardından MemcachedSTOREDyanıtı dönerse başarıyla kaydedilmiştir.
Anahtar-değer çifti ekleme yalnızca yoksa (add): Yalnızca anahtar yoksa kaydedilir. Anahtar mevcutsa işlem başarısız olur.
bashadd anotherkey 0 60 5 World1
2anotherkeyyoksaSTORED, varsaNOT STOREDyanıtı alınır.Var olan anahtarın değerini değiştirme (replace): Yalnızca anahtar varsa kaydedilir. Anahtar yoksa işlem başarısız olur.
bashreplace mykey 0 300 18 New value for key!1
2mykeyvarsaSTORED, yoksaNOT STOREDyanıtı alınır.Anahtar-değer çifti okuma (get): Belirtilen anahtar(lar)ın değerini alır.
bashget mykey anotherkey1Yanıt formatı:
VALUE mykey 0 18 New value for key! VALUE anotherkey 0 5 World END1
2
3
4
5ENDçıktısı okuma işleminin bittiğini belirtir.Anahtar-değer çifti silme (delete): Belirtilen anahtarı siler.
bashdelete mykey1Anahtar başarıyla silinirse
DELETED, yoksaNOT FOUNDyanıtı verilir.
Veri Yedekleme ve Geri Yükleme Üzerine Notlar
Memcached'in çalışma mantığını anlamak önemlidir: Bu bir bellek önbelleği sistemidir. Yani, Memcached'deki veriler RAM'de tutulur ve kalıcı bir yedekleme ya da otomatik yedekleme mekanizması sunmaz. Memcached servisi durur, makine yeniden başlatılır veya bellek yetersiz kalırsa, önbellekteki veriler kaybolabilir.
ServBay'in sunduğu veri yedekleme özellikleri (ayarlar, siteler, veritabanları, SSL sertifikaları vb.) daha çok kalıcı saklama sağlayan bileşenler içindir. Yani, örneğin MySQL/PostgreSQL veri dosyaları; ServBay'in ayarları; web sitesi ve SSL dosyaları yedeklenir. Memcached önbelleğindeki gerçek zamanlı veriler bu yedeklemeye dahil değildir, çünkü Memcached tasarımı gereği geçici, istenildiğinde tekrar inşa edilebilen bir önbellek katmanıdır.
Bu nedenle, Memcached için "yedekleme ve geri yükleme" genellikle önbellek verisini saklamaktan ziyade şunları ifade eder:
- Önbellek verisinin dışa aktarılması: Belirli bir senaryo için (ör. hata ayıklama veya önbellek taşıması), Memcached içeriğini dışa aktarmanız gerekirse, özel betikler yazmalısınız. Bu betikler Memcached'e bağlanıp ilginizi çeken anahtarları okur ve dosyaya aktarır. Memcached bütün anahtarları listeleyecek yerleşik bir komut sunmaz (performans için), dolayısıyla tipik olarak
stats cachedumpkomutuna (ayrıntılı günlük gerekebilir) veya uygulama tarafında anahtar isimlerini izlemenize dayanır. - Önbellek verisinin içe aktarılması: Dışarı aktarılan verileri tekrar Memcached'e yüklemek için, veri dosyasını okuyan ve
setveyaaddkomutlarıyla veriyi yükleyen betikler yazmalısınız.
Önemli Not: Çoğu kullanım için, Memcached'deki verilerin asıl veri kaynağından (veritabanı gibi) tekrar oluşturulabileceğinden emin olunmalıdır. Uygulamanız, önbellek kaybına toleranslı olmalı ve verinin bulunmadığı durumda otomatik olarak asıl kaynaklara dönüp (fallback) gerekirse tekrar önbelleğe yazmalıdır. Bu nedenle, Memcached önbelleği için tipik olarak düzenli yedekleme ve geri yükleme gerekli değildir.
Performans Optimizasyonu
Memcached'in performansı, yapılandırmanız ve kullanım şeklinizle yakından ilişkilidir. ServBay'de, aşağıdaki anahtar ayarları kolayca grafik arayüzden değiştirerek Memcached performansını optimize edebilirsiniz:
Bellek Optimizasyonu
En önemli parametre, Memcached'e tahsis edilen maksimum bellek miktarıdır (-m seçeneği).
- Uygun bellek sınırı belirleyin: ServBay panelinden Memcached'in maksimum belleğini (
-mseçeneği) arttırabilir ya da azaltabilirsiniz. Yeterli bellek, veri tahliyesini (eviction) azaltır ve önbellek vurma oranını yükseltir. Ancak çok fazla bellek, sistemdeki diğer servisleri sıkıntıya sokabilir; sistem kaynaklarını ve önbellek ihtiyacınızı dengeleyerek hareket edin.
Bağlantı Optimizasyonu
Maksimum eşzamanlı bağlantı sayısı (-c seçeneği) ayarlanabilir.
- Maksimum bağlantı sayısı ayarlayın: ServBay arayüzünden Memcached'in kabul edebileceği maksimum bağlantı sayısını (
-cseçeneği) arttırarak çok eşzamanlı istekler gönderen uygulamalarınız için darboğazları aşabilirsiniz.
Diğer Optimizasyon Önerileri
- Anahtar tasarımı: Kısa ve anlamlı anahtarlar kullanın, aşırı uzun ve karmaşık anahtarlardan kaçının.
- Değer serileştirme: Karmaşık veri yapıları için JSON, MessagePack, Protocol Buffers gibi verimli serileştirme yöntemlerini seçin; serileştirme/serileştirmeden çıkarma yükü ile depolama alanını dengeleyin.
- Önbellek stratejisi: Uygun bir önbellek geçerlilik ve güncelleme stratejisi oluşturun (örn. okurken önbelleğe ekleme, yazarken güncelleme/silme vb.); tutarlı ve geçerli veri için strateji net olmalıdır.
- Ağ gecikmesi: Yerel geliştirme (
localhost) ortamında sorun edilmez, fakat canlı ortamda Memcached sunucuları uygulama sunucularına olabildiğince yakın olmalı, böylece ağ gecikmesi (RTT) en aza iner.
Güvenlik Yönetimi
Memcached varsayılan olarak çok kapsamlı bir güvenlik özelliği sunmaz; bu sebeple Memcached servisini özellikle üretim dışı ortamlarda korumak önemlidir. ServBay yerel geliştirme ortamında hizmet varsayılan olarak sadece yerel ağda çalışır, bu sebeple risk azalır, ancak temel güvenlik önlemlerini bilmek faydalıdır:
Dinleme Adresini Sınırlandırma
- Yerel adrese bağlama: ServBay panelinde Memcached'in yalnızca 127.0.0.1 veya
localhostadresinde dinlemesini (-lseçeneği) sağlayın. Bu, ServBay'in varsayılan ayarıdır ve dış ağdan Memcached'inize doğrudan erişilmesi engellenir. Güvenlik önlemleriniz yoksa Memcached'i kamuya açık ağda asla yayınlamayın.
Güvenlik Duvarı Kullanma
- Güvenlik duvarı kuralları oluşturun: Her ne kadar ServBay Memcached'i yerel adrese bağlasa da, ek güvenlik için işletim sisteminizin güvenlik duvarını (macOS dahili veya
pfgibi) yapılandırarak dış ağdan gelen bağlantıların 11211 portuna ulaşmasını engelleyebilirsiniz.
Kimlik Doğrulama ve Şifreleme (İleri Düzey)
Memcached protokolünde dahili kimlik doğrulama ve şifreleme yoktur. Eğer güvenilmeyen bir ağ üzerinden erişmeniz gerekiyorsa, genellikle şu yöntemlerden biri gerekir:
- SSH tünellemesi: Client ile Memcached arası bağlantıyı SSH tüneli ile şifreleyin.
- VPN kullanımı: Memcached'i sadece VPN ile erişilebilen bir ağda dağıtın.
- Proxy kullanımı: Memcached önünde kimlik doğrulama ve şifreleme destekleyen bir proxy sunucu kullanın.
ServBay'in yerel geliştirme ortamında bu ileri tedbirler tipik olarak gerekmez; çünkü Memcached sadece yerelde dinler.
Sık Karşılaşılan Sorunlar ve Çözümler
Memcached’e Bağlanılamıyor
- Sorun: Uygulamanız ya da komut satırı aracı
localhost:11211adresine bağlanamıyor. - Çözüm:
- Memcached servisi durumunu kontrol edin: ServBay yönetim panelinde
Paketler->NoSQLüzerinden Memcached’in çalışıp çalışmadığını kontrol edin ya daservbayctl status memcachedkomutunu kullanın. Çalışmıyorsa başlatın. - Port ve dinlenen adresi kontrol edin: Uygulamanızın doğru adrese (
localhost/127.0.0.1) ve doğru portta (11211) bağlandığına emin olun. Memcached konfigürasyonunu ServBay’de kontrol edin. - Güvenlik duvarını kontrol edin: İşletim sistemi güvenlik duvarı veya başka bir güvenlik yazılımının 11211 portuna gelen istekleri engellemediğinden emin olun.
- Memcached servisi durumunu kontrol edin: ServBay yönetim panelinde
Önbellek Vurma Oranı Düşük
- Sorun: Uygulama çoğunlukla Memcached’de veri bulamıyor (önbellek vurma yok), sürekli veritabanı veya başka servislerden veri çekiliyor.
- Çözüm:
- Önbellekleme stratejinizi gözden geçirin: Kodunuzda önbellek ayarlarını ve okuma işleyişini analiz edin. Önbellek süresi yeterince uzun mu? Veri güncellenince önbellek güncelleniyor/siliniyor mu?
- Bellek tahsisini inceleyin: Memcached’in, sık kullanılan veriyi tutacak kadar belleği var mı? Yetersizse LRU (En Az Kullanılan Silinir) gibi politikalar veri kaybına sebep olur.
statskomutuylaevictionsdeğişkenini takip edin, yetersizse-mparametriyle bellek arttırın. - Önbellek anahtarlarını analiz edin: Anahtarlarınız, önbelleğe alınacak veriyi yeterince iyi temsil ediyor mu?
- Memcached istatistiklerini takip edin:
telnetile bağlanıpstatskomutuylaget_hits(vurulan) veget_misses(kaçırılan) istatistiklerine bakın. Vurma oranı:get_hits / (get_hits + get_misses). Yüksekevictionsgenellikle bellek yetersizliğine işaret eder.
Özet
Memcached; basit, hızlı ve etkili bir bellek önbelleği çözümüdür ve web uygulamalarının performansını yükseltmekte kritik bir rol oynar. ServBay; geliştiriciler için özel tasarlanmış yerel bir ortam aracı olarak, Memcached’in yönetimini ve entegrasyonunu basitleştirir ve hızlandırır.
ServBay yönetim paneli veya servbayctl aracı ile Memcached servisinin başlatma/durdurma, yapılandırma işlemlerini kolayca gerçekleştirebilirsiniz. Bağlantı yöntemleri, temel işlemler ve performans/güvenlik tavsiyeleriyle, Memcached’i yerelde hızlıca entegre edip uygulama geliştirme ve test süreçlerinizde en verimli şekilde faydalanabilirsiniz. Unutmayın, Memcached’in bellek odaklı doğasını iyi anlamak doğru bir önbellekleme stratejisi için kritik öneme sahiptir.
