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
Paketler
bölümüne gidin. - Paket listesinde,
NoSQL
kategorisinin altındakiMemcached
seç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:
# 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 -all
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 11211
1Bağlantı kurulduktan sonra,
version
(sürümü kontrol etme) veyastats
(istatistikleri görme) gibi Memcached komutlarını doğrudan yazabilirsiniz. Çıkmak içinquit
yazın.nc ile bağlanma:
bashnc localhost 11211
1Benzer ş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:
pip install pylibmc
# veya
pip install python-memcached
2
3
Sonrasında, aşağıdaki gibi Memcached'e bağlanıp kullanabilirsiniz:
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")
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
// 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";
}
}
?>
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);0
asla 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 MemcachedSTORED
yanı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 World
1
2anotherkey
yoksaSTORED
, varsaNOT STORED
yanı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
2mykey
varsaSTORED
, yoksaNOT STORED
yanıtı alınır.Anahtar-değer çifti okuma (get): Belirtilen anahtar(lar)ın değerini alır.
bashget mykey anotherkey
1Yanıt formatı:
VALUE mykey 0 18 New value for key! VALUE anotherkey 0 5 World END
1
2
3
4
5END
çıktısı okuma işleminin bittiğini belirtir.Anahtar-değer çifti silme (delete): Belirtilen anahtarı siler.
bashdelete mykey
1Anahtar başarıyla silinirse
DELETED
, yoksaNOT FOUND
yanı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 cachedump
komutuna (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
set
veyaadd
komutları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 (
-m
seç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ı (
-c
seç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
localhost
adresinde dinlemesini (-l
seç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
pf
gibi) 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:11211
adresine 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 memcached
komutunu 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.
stats
komutuylaevictions
değişkenini takip edin, yetersizse-m
parametriyle 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:
telnet
ile bağlanıpstats
komutuylaget_hits
(vurulan) veget_misses
(kaçırılan) istatistiklerine bakın. Vurma oranı:get_hits / (get_hits + get_misses)
. Yüksekevictions
genellikle 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.