PHP performansını artırmak için OPcache ve Redis nasıl optimize edilir?
- OPcache (Bayt Kodu Önbellekleme): PHP kodlarının derlenmiş bayt kodunu (bytecode) RAM’de saklayarak her HTTP isteğinde dosyanın yeniden okunmasını ve derlenmesini önler; bu da uygulamada 3 ila 5 kat performans artışı sağla
- Redis (Veri ve Oturum Önbellekleme): Sık erişilen veritabanı sorgu sonuçlarını, uygulama verilerini ve oturumları (session) bellekte tutarak disk I/O ve veritabanı yükünü hafifletir.
php.ini veya /etc/php/.../mods-available/opcache.ini dosyası üzerinden ayarlanı. Yüksek performans için önerilen parametreler şunlardır:[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=2
opcache.fast_shutdown=1
opcache.save_comments=1; Canlı (Production) Ortam İçin Kritik Ayar:
opcache.validate_timestamps=0
- opcache.memory_consumption: Önbellek için ayrılan RAM miktarıdır. Küçük projelerde 128 MB yeterli gelirken, WordPress, Laravel veya Magento gibi yapılarda 256 MB – 512 MB aralığı tercih edilmelidir.
- opcache.interned_strings_buffer: Tekrarlanan dize (string) yapıları için ayrılan bellektir (genellikle 16 MB veya 32 MB).
- opcache.max_accelerated_files: Önbelleğe alınacak maksimum PHP dosyası sayısıdır. Çok sayıda eklenti veya kütüphane içeren projelerde 20.000 – 30.000 seviyelerine çıkarılmalıdır.
- opcache.validate_timestamps:
1yapıldığında belirtilen saniye aralığıyla (revalidate_freq) dosyaların değişip değişmediği kontrol edilir.0yapıldığında ise dosya değişiklik kontrolleri kapatılır ve fazladan %5–10 performans kazancı elde edilir. Önemli:validate_timestamps=0kullanıldığında koddaki güncellemelerin geçerli olması içinsystemctl reload php-fpmkomutuyla PHP-FPM hizmeti yeniden başlatılmalı veya OPcache temizlenmelidir.
redis-server ve PHP eklentisi olan php-redis kurulmalıdır.<?php
$redis = new Redis();
$redis->connect(‘127.0.0.1’, 6379);function getCachedData($key) {
global $redis;// Önce Redis önbelleği kontrol edilir
$cached = $redis->get($key);
if ($cached !== false) {
return json_decode($cached, true);
}// Veri önbellekte yoksa veritabanından çekilir ve Redis’e yazılır (Örn: 1 saat / 3600 sn)
$data = expensiveDatabaseQuery($key);
$redis->setex($key, 3600, json_encode($data));return $data;
}
?>
php.ini dosyasında şu yapılandırma kullanılır:session.save_handler = redis session.save_path = “tcp://127.0.0.1:6379”
- Temel Katman (OPcache): Sunucudaki PHP dosya derleme yükünü tamamen ortadan kaldırmak için OPcache sürekli aktif tutulmalıdır.
- Veri Katmanı (Redis): OPcache kurulduktan sonra veritabanı sorgularının ve geçici uygulama verilerinin hızlandırılması için Redis devreye alınmalıdır.
