WordPress’te Redis Object Cache Kurulumu ve Hız Artışı

Google News Google News Flipboard Flipboard Sesli oku Yazıyı beğen Favorilere Ekle 0 Yorumlar
Daha fazla

WordPress siteniz büyüdükçe veritabanı sorguları artar, sayfa açılış süreleri uzar ve özellikle yoğun trafik anlarında sunucu CPU kullanımı tavan yapar. Bu sorunu LiteSpeed Cache ayarlarıyla kısmen çözebilirsiniz, ama sayfa cache’i her zaman yetmez; özellikle giriş yapmış kullanıcılar, WooCommerce sepetleri veya sık güncellenen dinamik içerikler için devreye object cache girer.

Bu yazıda, Hostinger VPS üzerinde kendi WordPress projelerimde kurduğum Redis object cache mimarisini adım adım anlatıyorum: kurulumdan WP-CLI ile doğrulamaya, yapılandırmadan performans ölçümüne kadar. Amaç, veritabanı sorgu yükünü azaltıp sayfa yanıt sürelerini düşürmek.

WordPress’te Neden Object Cache Gerekir?

WordPress her sayfa isteğinde onlarca hatta yüzlerce veritabanı sorgusu çalıştırır: menü verisi, widget ayarları, post meta, taksonomi ilişkileri, kullanıcı oturumu… Sayfa cache eklentileri (LiteSpeed Cache, WP Super Cache) bu isteklerin çoğunu HTML çıktısını önbelleğe alarak atlatır, ama giriş yapmış kullanıcılar, admin paneli, REST API istekleri ve WooCommerce gibi dinamik ekranlar sayfa cache’inin dışında kalır. Object cache, bu senaryolarda tekrar eden sorgu sonuçlarını bellekte (RAM) tutarak veritabanına gidiş sayısını azaltır.

Varsayılan olarak WordPress bir “transient” object cache kullanır, ama bu cache istek bittiğinde sıfırlanır — kalıcı değildir. Redis gibi harici bir “persistent object cache” katmanı eklediğinizde, cache verisi istekler arasında hayatta kalır ve aynı sorgu tekrar tekrar çalışmaz.

Redis Object Cache Nasıl Çalışır?

Redis, bellek içi (in-memory) bir key-value veri deposudur. WordPress tarafında bir “drop-in” cache dosyası (object-cache.php) WordPress’in wp_cache_get() ve wp_cache_set() fonksiyonlarını Redis’e yönlendirir. Böylece bir post meta sorgusu ilk çalıştığında sonucu Redis’e yazılır; sonraki isteklerde aynı veri doğrudan Redis’ten okunur, MySQL’e tekrar gidilmez.

Bu yaklaşımın en büyük faydası, çoklu sunucu (yatay ölçeklenen) mimarilerde de tutarlı çalışmasıdır — her PHP-FPM worker’ı aynı Redis instance’ına bağlanır, dolayısıyla cache paylaşılır. Bu noktada mikroservis mimarilerinde kullandığım servisler arası veri paylaşımı mantığıyla benzerlik kurabilirsiniz.

Hostinger VPS’te Redis Kurulumu

Hostinger VPS'te sunucu rafında Redis kurulumu

Paylaşımlı (shared) Hostinger paketlerinde Redis genelde hazır gelmez ya da sınırlı sürümdedir; VPS veya Cloud paketlerinde kendiniz kurabilirsiniz. Ubuntu tabanlı bir Hostinger VPS’te kurulum şu şekilde:

sudo apt update
sudo apt install redis-server -y
sudo systemctl enable redis-server
sudo systemctl start redis-server
redis-cli ping

redis-cli ping komutu PONG döndürüyorsa servis çalışıyor demektir. Ardından /etc/redis/redis.conf dosyasında bellek limitini ve tahliye (eviction) politikasını ayarlamak gerekir; aksi halde Redis sunucunun tüm RAM’ini tüketebilir:

maxmemory 256mb
maxmemory-policy allkeys-lru

Değişiklikten sonra sudo systemctl restart redis-server ile servisi yeniden başlatın. PHP tarafında Redis’e bağlanabilmek için php-redis uzantısının kurulu olması gerekir: sudo apt install php-redis && sudo systemctl restart php8.2-fpm (PHP sürümünüze göre değişir).

WordPress’i Redis’e Bağlama

WordPress tarafında en pratik yol, “Redis Object Cache” eklentisini kurmaktır. Eklenti aktive edildikten sonra Ayarlar > Redis menüsünden “Enable Object Cache” butonuna tıklamanız yeterli; eklenti otomatik olarak wp-content/object-cache.php drop-in dosyasını oluşturur.

Elle kurulum tercih ediyorsanız (özellikle WP-CLI kullanan bir deployment akışınız varsa), aynı işlemi komut satırından da yapabilirsiniz:

wp plugin install redis-cache --activate
wp redis enable
wp redis status

wp redis status çıktısında “Status: Connected” görmelisiniz. Görmüyorsanız Redis servisinin ayakta olduğunu ve PHP-Redis uzantısının yüklü olduğunu tekrar kontrol edin.

wp-config.php Yapılandırması

Varsayılan ayarlar çoğu kurulum için yeterlidir, ama üretim ortamında şu satırları wp-config.php içine eklemek cache davranışını daha öngörülebilir kılar:

define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_REDIS_DATABASE', 0);
define('WP_CACHE_KEY_SALT', 'ozgurbayram_com_');

WP_CACHE_KEY_SALT özellikle aynı Redis instance’ını birden fazla WordPress kurulumu (staging + production gibi) için paylaşıyorsanız zorunludur; aksi halde cache anahtarları çakışır ve bir sitedeki veri diğerinde görünebilir. Bu, çok siteli bir sunucuda gerçekten yaşadığım ve fark edilmesi zor olan bir hatadır.

Performans Testi ve Karşılaştırma

Redis performans testi ve sorgu grafiği analizi

Kurulumun işe yarayıp yaramadığını doğrulamak için Query Monitor eklentisiyle “Database Queries” sekmesini object cache açık ve kapalıyken karşılaştırabilirsiniz. Tipik bir WooCommerce ürün sayfasında, object cache olmadan 150-300 arası sorgu görmek normalken, Redis devrede olduğunda tekrar eden sorguların büyük kısmı cache’ten karşılanır ve gerçek MySQL sorgu sayısı belirgin şekilde düşer.

[Buraya kendi projenizden Query Monitor ekran görüntüsü ekleyin: object cache öncesi/sonrası sorgu sayısı karşılaştırması]

Ölçüm yaparken tek bir isteğe değil, ardışık isteklere bakın — Redis’in asıl faydası ilk istekten sonra, aynı verinin tekrar tekrar sorgulanmadığı ikinci ve sonraki isteklerde ortaya çıkar. Sunucu tarafı yükü izlemek için redis-cli info stats komutuyla keyspace_hits ve keyspace_misses oranına bakmak da faydalıdır; hit oranı zamanla yükseliyorsa cache doğru çalışıyor demektir.

Yük testi için Apache Bench (ab) veya k6 gibi araçlarla eşzamanlı istek simülasyonu yapmak, gerçek trafik altında object cache’in etkisini daha net gösterir. Örneğin ab -n 200 -c 20 https://siteniz.com/ komutuyla 20 eşzamanlı kullanıcıdan 200 istek gönderip ortalama yanıt süresini object cache açık/kapalı durumlarda karşılaştırabilirsiniz. Bu tür testleri canlı ortamda değil, mümkünse bir staging kopyasında çalıştırmanızı öneririm; yoğun yük testi canlı sunucuda gerçek ziyaretçileri etkileyebilir.

Redis Object Cache Ne Zaman Gereksizdir?

Her WordPress sitesi Redis’e ihtiyaç duymaz. Düşük trafikli, çoğunlukla statik içerik sunan (kurumsal tanıtım sitesi, kişisel blog gibi) projelerde iyi yapılandırılmış bir sayfa cache eklentisi çoğu zaman yeterlidir; Redis eklemek ekstra bir servis, ekstra bir bakım yükü ve ekstra bir hata noktası demektir. Kendi deneyimimde Redis’i özellikle şu senaryolarda anlamlı buldum: günlük yüzlerce sipariş alan WooCommerce mağazaları, üyelik/abonelik sistemleri, sık API isteği alan headless WordPress kurulumları ve çoklu dil eklentisiyle (WPML, Polylang) çalışan, sorgu sayısı zaten yüksek olan siteler.

Tek sunuculu, düşük trafikli bir kurulumda Redis kurmak yerine önce sunucu kaynak kullanımınızı ve mevcut sayfa cache ayarlarınızı gözden geçirmek genelde daha yüksek getiri sağlar. Object cache, doğru problemi çözmek için doğru araç seçildiğinde değer katar; her performans sorununun çözümü olarak görülmemelidir.

Karşılaşılan Hatalar ve Çözümleri

“Redis Object Cache eklentisi ‘Not Connected’ gösteriyor”: Genelde Redis servisinin durduğunu (sudo systemctl status redis-server ile kontrol edin) ya da WP_REDIS_HOST/WP_REDIS_PORT değerlerinin yanlış olduğunu gösterir. Hostinger paylaşımlı hosting’te Redis soketi farklı bir yoldan sunulabilir; bu durumda barındırma sağlayıcınızın Redis host/port bilgisini kontrol panelinden teyit edin.

“object-cache.php dosyası güncellenemedi” hatası: Dosya izinleri veya salt-okunur dosya sistemi kaynaklıdır. wp-content dizininin PHP-FPM kullanıcısına yazma izni verdiğinden emin olun.

Bellek doluyor, Redis eski verileri siliyor: maxmemory-policy ayarı noeviction ise Redis bellek dolduğunda yeni yazma işlemlerini reddeder ve site hata vermeye başlar. allkeys-lru politikası bu riski azaltır; ayrıca bu tür kesintiler 503 Service Unavailable hatalarına da yol açabilir, dolayısıyla bellek limitini sunucu kapasitenize göre gerçekçi belirleyin.

Güvenlik ve Bakım Önerileri

Redis sunucu güvenliği ve bakım kontrolleri

Redis’i varsayılan ayarlarla dışarıya açık bırakmayın. redis.conf içinde bind 127.0.0.1 ile sadece localhost bağlantılarına izin verin ve mümkünse requirepass ile bir parola tanımlayın. Güvenlik duvarında (ufw, Hostinger VPS firewall) 6379 portunu dışarıya kapatmak da önemli bir katmandır.

Düzenli bakım için Redis’in bellek kullanımını izleyin, sunucu yeniden başlatıldığında servisin otomatik ayağa kalktığından emin olun (systemctl enable) ve büyük içerik güncellemelerinden sonra wp cache flush ile cache’i manuel temizlemeyi bir alışkanlık haline getirin. Sunucu yedekleme sürecinizin bir parçası olarak düzenli yedekleme rutini kurmanız, cache katmanı dahil tüm altyapı değişikliklerinden önce güvenli bir geri dönüş noktası sağlar.

Sonuç: WordPress Redis Object Cache Özeti

Redis object cache, özellikle WooCommerce mağazaları, üyelik sistemleri ve yoğun trafik alan içerik siteleri için sayfa cache’inin kapatamadığı boşluğu dolduran bir katmandır. Kurulumu tek başına yeterli değildir; bellek limiti, eviction politikası ve cache key salt gibi ayarları doğru yapılandırmak, canlı ortamda beklenmedik hatalarla karşılaşmamak için kritik. Kendi projelerimde bu adımları izleyerek veritabanı sorgu yükünü gözle görülür biçimde azalttım; sizin sunucunuzdaki gerçek kazanç, mevcut trafik profilinize ve sorgu yoğunluğunuza göre değişecektir.

Yazar: Özgür Bayram — WordPress ve Laravel projelerinde sunucu tarafı performans, API entegrasyonu ve eklenti mimarisi üzerine çalışan bir yazılımcıyım. Bu yazıdaki adımlar, kendi Hostinger VPS kurulumlarımda uyguladığım yapılandırmalara dayanmaktadır.

Sık Sorulan Sorular

Redis object cache ile sayfa cache aynı şey mi?

Hayır. Sayfa cache (LiteSpeed Cache, WP Super Cache) tüm HTML çıktısını önbelleğe alır ve genelde giriş yapmamış ziyaretçiler için çalışır. Object cache ise veritabanı sorgu sonuçlarını önbelleğe alır ve giriş yapmış kullanıcılar, admin paneli, WooCommerce gibi dinamik alanlarda da devrededir. İkisi birbirini tamamlar, birbirinin yerine geçmez.

Paylaşımlı (shared) Hostinger hosting’te Redis kullanabilir miyim?

Bazı paylaşımlı planlarda sınırlı Redis desteği bulunabilir; kontrol panelinizden “Redis” veya “Object Cache” seçeneğini kontrol edin. Tam kontrol ve özelleştirme için VPS veya Cloud hosting paketleri daha uygundur, çünkü redis.conf üzerinde bellek ve güvenlik ayarlarını siz yönetirsiniz.

Redis kurduktan sonra siteme ekstra yük bindirir mi?

Redis, RAM tabanlı çalıştığı için doğru yapılandırıldığında CPU ve disk I/O yükünü azaltır. Ancak maxmemory sınırı sunucu kapasitenizin üzerinde belirlenirse ya da başka servislerle (PHP-FPM, MySQL) bellek çakışması yaşanırsa performans kazancı yerine kesintiye yol açabilir; bu yüzden bellek limitini sunucu kaynaklarınıza göre ayarlamak önemlidir.

Object cache eklentisini kaldırırsam sitem bozulur mu?

Eklentiyi devre dışı bıraktığınızda “Disable Object Cache” işlemiyle object-cache.php drop-in dosyası kaldırılır ve WordPress otomatik olarak varsayılan (kalıcı olmayan) cache mekanizmasına döner. Site çalışmaya devam eder, sadece performans avantajını kaybedersiniz.

Redis yerine Memcached kullanabilir miyim?

Evet, Memcached de benzer bir amaca hizmet eder ve “Memcached Object Cache” eklentileriyle entegre edilebilir. Redis’in farkı, veri yapıları (liste, hash, set) sunması ve isteğe bağlı kalıcılık (persistence) desteğidir; çoğu WordPress senaryosunda ikisi de yeterli performans sağlar, tercih genelde sunucu sağlayıcınızın hangisini daha iyi desteklediğine bağlıdır.

Cache verisi ne zaman otomatik temizlenir?

WordPress, bir post güncellendiğinde veya silindiğinde ilgili cache anahtarlarını otomatik olarak geçersiz kılar (invalidate). Ancak bazı özel sorgular veya üçüncü parti eklentiler cache invalidation kurallarına uymayabilir; böyle durumlarda wp cache flush komutuyla manuel temizlik yapmanız gerekebilir.

Redis object cache SEO’yu doğrudan etkiler mi?

Doğrudan bir sıralama faktörü değildir, ama sayfa yanıt sürelerini kısaltarak Core Web Vitals metriklerini (özellikle TTFB) iyileştirir. Daha hızlı sunucu yanıtı, dolaylı olarak kullanıcı deneyimini ve arama motorlarının sitenizi tarama verimliliğini olumlu etkiler.

İlgili Yazılar

Kaynaklar

Yazar Hakkında

Benzer Yazılar

Bir Cevap Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.

0/30 karakter