ServBay'de PHP Veri Önbellekleme için Memcached Kullanımı
ServBay, güçlü bir yerel web geliştirme ortamı olarak, önceden yapılandırılmış yüksek performanslı Memcached paketi (Memcached sunucusu) ve uyumlu PHP eklentisiyle birlikte gelir. Böylece geliştiriciler, PHP uygulamalarında verimli veri önbellekleme olanaklarından kolayca faydalanabilir ve uygulama performanslarını önemli ölçüde artırabilirler.
Bu makalede, ServBay'de Memcached ve ilgili PHP eklentisinin nasıl doğrulanıp kullanılacağını ayrıntılı olarak bulacaksınız.
Memcached Nedir?
Memcached, yüksek performansa sahip dağıtık bir bellek nesne önbellek sistemidir. Veritabanı sorgu sonuçları, API yanıtları veya sayfa parçacıkları gibi verileri geçici olarak bellekte tutarak, arka uç veri depolarına (örneğin veri tabanlarına) erişim sıklığını azaltır ve böylece dinamik web uygulamalarında yanıt hızını ve sistemin işleyiş kapasitesini artırır.
Temel Özellikleri
- Yüksek Performanslı: Veriler RAM’de tutulduğu için okuma/yazma işlemleri son derece hızlıdır.
- Dağıtık Mimari: Birden fazla sunucuda dağıtık önbellek havuzu oluşturmaya uygundur, kolayca ölçeklenebilir.
- Kullanım Kolaylığı: Basit protokole sahip, zengin istemci kütüphane desteğiyle kolay entegre edilir.
- Veritabanı Yükünü Azaltır: Özellikle yüksek eşzamanlılığa sahip ortamlarda, veritabanı sorgu yükünü etkin bir şekilde düşürür.
memcache
ve memcached
PHP Eklentileri Arasındaki Fark
PHP'de, Memcached sunucusuna bağlanmak için yaygın olarak iki farklı eklenti kullanılır: memcache
ve memcached
. İsmi benzer olsa da farklıdırlar ve farklı API ve özellikler sunarlar:
memcache
Eklentisi:- PHP için eski bir eklentidir.
- Daha çok prosedürel bir API sağlar (
memcache_connect()
,memcache_set()
, vs.). - Temel işlevler içerir, bazı ileri seviye özellikleri (ör. tutarlı hashing) desteklemez (bazı istemci kütüphaneleri hariç).
memcached
Eklentisi:- Daha yeni bir PHP eklentisidir (libmemcached kütüphanesini kullanır).
- Nesne tabanlı bir API (
Memcached
sınıfı) sunar. - Tutarlı hashing, ikili protokol, SASL kimlik doğrulama, daha esnek serileştirme seçenekleri gibi ileri düzey özellikleri destekler.
- Genellikle, gelişmiş özellikleri ve sürekli güncelliğiyle
memcached
eklentisinin kullanımı tavsiye edilir.
ServBay, varsayılan olarak güçlü özellikler sunan memcached
PHP eklentisini sağlar ve kullanılmasını önerir.
ServBay'deki Memcached Paketi ve PHP Eklentisi
ServBay, Memcached sunucusunu yönetilebilir bir paket olarak entegre ettiği gibi, tüm entegre PHP sürümleri için memcached
PHP eklentisini önceden kurup varsayılan olarak etkinleştirir.
Bu, çoğu durumda ServBay kurulumunun ardından Memcached sunucusu ve PHP eklentilerinin hemen kullanıma hazır olduğu, ek derleme veya uzun yapılandırma işlemlerine gerek olmadığı anlamına gelir.
Memcached Paket Durumunu Kontrol Etme:
ServBay’in ana arayüzünden veya paket yönetimi bölümünden Memcached
paketini bulup, “Çalışıyor” durumda olup olmadığını kontrol edebilirsiniz. Eğer çalışmıyorsa başlatmayı deneyin.
memcached
PHP Eklentisinin Yüklü Olduğunu Kontrol Etme:
Belli bir PHP sürümünde memcached
eklentisinin yüklü olup olmadığını doğrulamanın en kolay yolu phpinfo()
fonksiyonunu kullanmaktır:
ServBay web dizininiz (varsayılan olarak
/Applications/ServBay/www
) altında yeni bir PHP dosyası oluşturun, örneğininfo.php
.İçeriğine aşağıdaki kodu ekleyin:
php<?php phpinfo(); ?>
1
2
3Bu dosyayı ServBay’de ayarlanmış yerel alan adınız üzerinden ziyaret edin (örneğin, alan adınız
servbay.demo
isehttp://servbay.demo/info.php
).Açılan
phpinfo
sayfasında "memcached" kelimesini arayın. "memcached" adlı bir başlık, altında yapılandırma ve sürüm bilgileri ile görünüyorsa, bu eklentinin başarıyla yüklendiğini ve kullanılabilir olduğunu gösterir.
PHP Kodunda Memcached Kullanımı
Memcached sunucusunun çalışır durumda ve memcached
PHP eklentisinin yüklü olduğunu doğruladıktan sonra, PHP uygulamanızda Memcached
sınıfını kullanarak sunucuya bağlanıp önbellekleme işlemleri gerçekleştirebilirsiniz.
Memcached sunucusu varsayılan olarak localhost
adresinde, standart 11211
portunda hizmet verir.
Örnek Kod
Aşağıdaki örnek PHP kodu ile, yerel Memcached sunucusuna nasıl bağlanıp veri ekleyip alabileceğinizi görebilirsiniz:
Bu kodu ServBay web dizininize bir PHP dosyası olarak kaydedin (ör. /Applications/ServBay/www/memcached_test.php
):
<?php
// Memcached sunucu bilgileri
$memcached_host = 'localhost';
$memcached_port = 11211;
// Memcached istemci nesnesi oluştur
$memcached = new Memcached();
// Memcached sunucusunu bağlantı havuzuna ekle
// addServer() yöntemi, başarıyla listeye eklenip eklenmediğini boolean olarak döner, bağlantı durumunu göstermez
if (!$memcached->addServer($memcached_host, $memcached_port)) {
// Not: addServer başarısızlığı genellikle yapılandırmayla ilgilidir, sunucuya erişememekle ilgili değildir
die("Memcached sunucusu istemci bağlantı listesine eklenemedi. Lütfen host ve port ayarlarını kontrol edin.");
}
// Bağlantıyı test etmek için var olmayan bir anahtar çekiliyor (isteğe bağlı, fakat önerilir)
// get() false veya boş dizi dönerse anahtar yok ya da bağlantı sorunu var demektir
// Memcached::getResultCode() ile daha detaylı durum kodu alınabilir
$test_key = 'servbay_memcached_connection_test';
$memcached->get($test_key); // Var olmayan bir anahtarın get edilmesi
$result_code = $memcached->getResultCode();
if ($result_code !== Memcached::RES_NOTFOUND && $result_code !== Memcached::RES_SUCCESS) {
// RES_NOTFOUND veya RES_SUCCESS haricinde bir kodsa bağlantı sorunu olabilir
// Not: RES_SUCCESS, boş değer alındığında da dönebilir
// Daha titiz bir bağlantı kontrolü ilave mantık veya müşteri kütüphaneye özel davranışlar gerektirebilir
// Yerel geliştirmede, genellikle addServer başarılıysa ve sonraki işlemler hata vermiyorsa bağlantı normaldir
echo "Uyarı: Memcached sunucusuna bağlanırken bir sorun olabilir. Sonuç Kodu: " . $result_code . "<br>";
// Gerçek uygulamada daha ayrıntılı hata yönetimi yapılabilir
} else {
echo "Memcached sunucusuna başarıyla bağlanıldı ({$memcached_host}:{$memcached_port}).<br>";
}
// --- Önbellek İşlemleri Örneği ---
// Önbelleğe alınacak veri
$key = 'user_profile_1234';
$data = [
'id' => 1234,
'username' => 'servbay-demo',
'email' => '[email protected]',
'status' => 'active'
];
$expiration = 3600; // Önbellek geçerlilik süresi - saniye cinsinden (burada 1 saat)
// Önbelleğe veri kaydet
// set() işlemin başarılı olup olmadığını boolean döner
if ($memcached->set($key, $data, $expiration)) {
echo "Veri başarıyla Memcached’te önbelleklendi, anahtar '{$key}', süresi {$expiration} saniye.<br>";
} else {
echo "Veri önbellekleme başarısız!<br>";
// Hata nedenini $memcached->getResultCode() ile öğrenebilirsiniz
echo "Sonuç Kodu: " . $memcached->getResultCode() . "<br>";
}
// Önbellekten veri almaya çalış
echo "Önbellekten veri alınmaya çalışılıyor...<br>";
$cachedData = $memcached->get($key);
if ($cachedData !== false) { // Memcached::get() önbellek sonucu bulunamazsa veya hata olursa false döner
echo "Önbellekten veri başarıyla alındı:<br>";
echo "<pre>";
print_r($cachedData);
echo "</pre>";
} else {
echo "Önbellek sonucu bulunamadı veya alma başarısız oldu, anahtar '{$key}'.<br>";
echo "Sonuç Kodu: " . $memcached->getResultCode() . "<br>";
}
// Önbelleğin süresi dolduğundaki davranış (ör. zaman geçtiğinde)
// Normalde uygulamada, $cachedData false dönerse, veriyi orijinal kaynaktan (ör. veritabanı) çekip tekrar önbelleğe alırsınız.
// Örnek: Önbellek verisini silme
/*
echo "Önbellek verisi siliniyor...<br>";
if ($memcached->delete($key)) {
echo "Veri önbellekten silindi, anahtar '{$key}'.<br>";
} else {
echo "Önbellek verisi silinemedi!<br>";
echo "Sonuç Kodu: " . $memcached->getResultCode() . "<br>";
}
// Silinen veriyi tekrar almaya çalış
echo "Silinen veri tekrar alınmaya çalışılıyor...<br>";
$cachedDataAfterDelete = $memcached->get($key);
if ($cachedDataAfterDelete !== false) {
echo "Veri silinememiş (beklenmedik durum):<br>";
print_r($cachedDataAfterDelete);
} else {
echo "Veri artık önbellekte yok (beklenen durum).<br>";
echo "Sonuç Kodu: " . $memcached->getResultCode() . "<br>";
}
*/
// Örnek: Tüm önbelleği temizleme (Dikkatli kullanın!)
/*
echo "Tüm önbellek temizleniyor...<br>";
if ($memcached->flush()) {
echo "Tüm önbellek verileri temizlendi.<br>";
} else {
echo "Önbellek temizleme başarısız!<br>";
echo "Sonuç Kodu: " . $memcached->getResultCode() . "<br>";
}
*/
?>
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
memcached_test.php
dosyasını ServBay ile yapılandırdığınız yerel web sitenizden ziyaret ederek, bağlantı durumu ve veri yazma/okuma sonuçlarını görebilirsiniz.
Dikkat Edilmesi Gerekenler
- ServBay’de Memcached paketinin çalışıyor durumda olduğundan emin olun.
- Memcached, varsayılan olarak
127.0.0.1
(veyalocalhost
) adresinde11211
portunu dinler. Genelde bu ayarı değiştirmeniz gerekmez. - PHP’den bağlantı sorunları yaşarsanız, Memcached paketinin çalışıp çalışmadığını ve olası bir güvenlik duvarı tarafından bağlantının engellenip engellenmediğini kontrol edin.
Memcached
sınıfındaaddServer
yöntemi yalnızca sunucuyu bağlantı havuzuna ekler, anında bağlantı veya kullanılabilirlik testi yapmaz. Bağlantı ve işlemler,get
,set
gibi sonraki yöntemler çağrıldığında gerçekten başlar. Bunların dönüş değerleri veyagetResultCode()
ile başarıyı kontrol edebilirsiniz.
Sonuç
ServBay, geliştiricilere Memcached kullanımını son derece kolaylaştırır. ServBay’in entegre Memcached paketi ile birlikte önceden kurulu ve etkin memcached
PHP eklentisiyle, karmaşık kurulum ve yapılandırma işlemlerine gerek kalmadan hızlıca yerel geliştirme ortamınızda Memcached ile verimli veri önbellekleme yapabilir, yüksek performanslı PHP uygulamaları geliştirmeye sağlam bir zemin hazırlayabilirsiniz.