WordPress'i hızlandırmak için akla ilk gelen şey genellikle sayfa önbelleğidir: ziyaretçiye hazır bir HTML dosyası servis edip PHP'yi hiç çalıştırmamak. Bu yaklaşım statik bir blog için harika sonuç verir, ancak sepet, oturum, kullanıcı paneli veya fiyat hesaplaması içeren siteler için tek başına yetmez. Çünkü bu sayfaların her açılışında WordPress yine de PHP'yi çalıştırır ve veritabanına onlarca, bazen yüzlerce sorgu gönderir. İşte tam bu noktada, sayfa önbelleğinin göremediği yerde devreye giren araç Redis nesne önbelleğidir.
Bu rehberde nesne önbelleğinin ne olduğunu, sayfa önbelleğinden nerede ayrıldığını ve sunucunuzda Redis'in kurulu olduğunu varsayarak WordPress'i ona nasıl bağladığınızı adım adım göstereceğim. Kıdemli bir sistem yöneticisi gözüyle, gerçek komutlarla ve WooCommerce gibi dinamik sitelerde alacağınız somut kazanımlarla ilerleyeceğiz. Amacımız süslü bir kurulum değil; siz wp-config.php dosyasını kapattığınızda sitenizin veritabanına gereksiz yere gitmeyi bırakması.
Nesne Önbelleği ile Sayfa Önbelleği Aynı Şey Değildir#
Bu ikisini karıştırmak, performans ayarlarında en sık yapılan hatadır. İkisi de "önbellek" kelimesini taşır ama tamamen farklı katmanlarda çalışır ve birbirinin yerine geçmez; iyi bir kurulumda ikisi birlikte kullanılır.
Sayfa önbelleği (page cache), bir isteğin sonucunda üretilen tam HTML çıktısını saklar. Ziyaretçi bir daha aynı sayfayı istediğinde WordPress hiç çalışmaz; web sunucusu diskteki ya da bellekteki hazır HTML'i doğrudan verir. Çok hızlıdır ama "herkese aynı çıktı" mantığıyla çalışır. Kullanıcı giriş yaptığında, sepette ürün olduğunda veya sayfa kişiye özel bir şey gösterdiğinde bu önbellek atlanır (bypass edilir) ve site sıfırdan üretilmek zorunda kalır.
Nesne önbelleği (object cache) ise WordPress'in kendi içindeki bir katmandır. WordPress her istekte veritabanından ayar (wp_options), gönderi meta verisi, terim ilişkileri, kullanıcı yetkileri gibi çok sayıda küçük veriyi çeker. Bu verilerin çoğu tek bir sayfa yüklemesi boyunca defalarca istenir. WordPress bunları varsayılan olarak yalnızca o istek süresince bellekte tutar (non-persistent cache); istek bittiğinde her şey silinir. Redis devreye girdiğinde bu önbellek kalıcı hale gelir: bir istekte veritabanından çekilen değer Redis'e yazılır, sonraki isteklerde doğrudan Redis'ten okunur ve MySQL'e hiç gidilmez.
Aradaki farkı bir tabloyla netleştirelim:
| Özellik | Sayfa Önbelleği | Nesne Önbelleği (Redis) |
|---|---|---|
| Ne saklar | Tam HTML çıktısı | Veritabanı sorgu sonuçları, ayarlar, meta |
| Hangi katman | Web sunucusu / eklenti | WordPress çekirdeği (WP_Object_Cache) |
| Giriş yapmış kullanıcı | Genellikle atlanır | Yine de çalışır |
| WooCommerce sepet/hesap | Etkisiz | Belirgin hızlanma |
| PHP çalışır mı | Hayır (isabet varsa) | Evet, ama daha az sorguyla |
| Örnek araç | LiteSpeed Cache, WP Rocket | Redis + Redis Object Cache eklentisi |
Kısacası sayfa önbelleği "sayfayı hiç üretme" der; nesne önbelleği "sayfayı üret ama veritabanını yorma" der. Dinamik siteler ikincisine muhtaçtır. Genel performans stratejisini toparlamak için WordPress hız optimizasyonu rehberimize de göz atabilirsiniz.
Redis Neden Nesne Önbelleği İçin Doğru Seçim#
Redis, verileri diskte değil bellekte (RAM) tutan bir anahtar-değer deposudur. WordPress'in nesne önbelleğinden istediği tam da budur: mikrosaniyeler içinde okuma-yazma, otomatik süre aşımı (TTL) ve grup bazlı temizleme yeteneği. MySQL'e giden bir sorgu disk erişimi, sorgu ayrıştırma ve kilit yönetimi gerektirirken, Redis'ten okuma neredeyse anlıktır.
Redis'in ne olduğuna ve mimarisine derinlemesine bakmak isterseniz Redis nedir yazısı iyi bir başlangıç. Burada bilmemiz gereken temel şey şu: Redis genellikle aynı sunucuda 127.0.0.1:6379 üzerinden ya da bir Unix soketi üzerinden çalışır ve WordPress ona PHP'nin phpredis (ya da alternatif olarak Predis) istemcisiyle bağlanır.
Sunucunuzda Redis'in gerçekten çalıştığını kurulumdan önce doğrulamakta fayda var:
# Redis servisi ayakta mı
systemctl status redis-server
# Doğrudan iletişim testi — PONG dönmeli
redis-cli ping
# PHP tarafında phpredis eklentisi yüklü mü
php -m | grep -i redis
redis-cli ping komutu PONG döndürüyorsa Redis çalışıyor demektir. php -m çıktısında redis satırını görüyorsanız, PHP'nin WordPress'ten Redis'e bağlanması için gerekli sürücü de hazır demektir. Bu iki koşul sağlanmadan eklenti kurmak sonuç vermez; eklenti "Redis'e bağlanılamıyor" uyarısı verir.
Paylaşımlı hosting kullanıyorsanız Redis'i kendiniz kuramazsınız; bu tamamen sunucu tarafı bir hizmettir. Clou.TR hosting paketlerinde Redis desteği hazır sunulur, dolayısıyla siz yalnızca eklenti ve wp-config.php adımlarıyla ilgilenirsiniz. Kendi sunucunuzu yönetiyorsanız, kurulum ve güvenlik için sunucu yönetimi hizmetimiz devreye girer.
Redis Object Cache Eklentisini Kurma#
WordPress tarafında en yaygın ve güvenilir çözüm, Till Krüss tarafından geliştirilen Redis Object Cache eklentisidir. Eklenti, WordPress'in beklediği object-cache.php "drop-in" dosyasını wp-content dizinine yerleştirerek çekirdeğin nesne önbelleği motorunu Redis ile değiştirir.
Kurulum için iki yol var. Panelden yönetiyorsanız yönetici arayüzünde Eklentiler > Yeni Ekle bölümüne gidip "Redis Object Cache" araması yapmanız ve etkinleştirmeniz yeterli. Sunucuya SSH erişiminiz varsa WP-CLI çok daha hızlıdır:
# WordPress kök dizininde çalıştırın
cd /home/kullanici/public_html
# Eklentiyi indir ve etkinleştir
wp plugin install redis-cache --activate
# Drop-in'i devreye al (object-cache.php dosyasını yerleştirir)
wp redis enable
# Bağlantı durumunu kontrol et
wp redis status
wp redis enable komutu başarılı olduğunda wp-content/object-cache.php dosyasının oluştuğunu göreceksiniz. wp redis status çıktısında "Status: Connected" ve kullanılan istemci (phpredis) bilgisini görmelisiniz. Bu noktada eklenti henüz varsayılan ayarlarla, yani 127.0.0.1:6379 üzerinden bağlanmayı dener. Çoğu tek sunuculu kurulumda bu ayar doğrudan çalışır, ama bağlantıyı açıkça tanımlamak her zaman daha sağlıklıdır. Bir sonraki adımda tam olarak bunu yapacağız.
Eklentinin yönetici panelindeki "Object Cache" ekranında "Enable Object Cache" düğmesi ve canlı metrikler (isabet oranı, çağrı sayısı) yer alır. Ürün seçimi ve genel performans eklentileri konusunda daha geniş bir liste için WordPress eklenti önerileri yazısındaki başlıkları da inceleyebilirsiniz.
wp-config.php ile Bağlantıyı Tanımlama#
Redis'in bağlantı bilgilerini eklenti arayüzünden değil, doğrudan wp-config.php dosyasından tanımlamak en temiz ve en taşınabilir yöntemdir. Böylece ayarlar sürüm kontrolüyle taşınır, eklenti güncellemelerinde kaybolmaz ve farklı ortamlar (canlı, hazırlık) arasında net kalır.
wp-config.php dosyasını açın ve /* That's all, stop editing! */ satırının üstüne aşağıdaki tanımları ekleyin. Yeri önemlidir; bu satırdan sonrası WordPress tarafından işlenmez.
// --- Redis Nesne Önbelleği Ayarları ---
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_TIMEOUT', 1 ); // saniye — bağlantı zaman aşımı
define( 'WP_REDIS_READ_TIMEOUT', 1 );
// Aynı Redis'i birden fazla site kullanıyorsa veritabanı numarasıyla ayırın (0-15)
define( 'WP_REDIS_DATABASE', 0 );
// Birden fazla WordPress paylaşıyorsa anahtarları benzersiz bir önekle ayırın
define( 'WP_CACHE_KEY_SALT', 'site1_' );
// Nesne önbelleğini genel olarak aç
define( 'WP_CACHE', true );
WP_CACHE_KEY_SALT özellikle önemlidir: aynı Redis sunucusunda birden çok WordPress sitesi barındırıyorsanız, her sitenin anahtarlarını farklı bir önekle ayırmazsanız siteler birbirinin önbelleğini ezer. Her site için site1_, magaza_ gibi benzersiz bir değer verin veya alternatif olarak her siteye ayrı bir WP_REDIS_DATABASE numarası atayın.
Redis parola ile korunuyorsa (production sunucularda korunmalıdır) parolayı da ekleyin:
define( 'WP_REDIS_PASSWORD', 'buraya-guclu-bir-parola' );
Bağlantı Unix soketi üzerinden yapılıyorsa (TCP yerine, daha düşük gecikme için) host tanımını şu şekilde değiştirin:
define( 'WP_REDIS_HOST', '/var/run/redis/redis.sock' );
define( 'WP_REDIS_PORT', 0 ); // soket kullanılırken port 0
Tanımları kaydettikten sonra eklenti arayüzüne dönüp "Enable Object Cache" düğmesine basın (ya da WP-CLI ile wp redis enable çalıştırın). "Connected" durumunu gördüğünüzde WordPress artık nesne önbelleğini Redis'e yazıyor demektir.
Bağlantıyı ve Gerçek Kazanımı Doğrulama#
"Kurdum" demek yetmez; gerçekten çalıştığını gözlemlemek gerekir. Birkaç basit kontrolle hem bağlantıyı hem de kazanımı somut olarak görebilirsiniz.
Önce WP-CLI ile durumu ve bir okuma-yazma testini çalıştırın:
# Bağlantı ve istemci bilgisi
wp redis status
# Redis üzerinde canlı anahtarları izleyin
redis-cli monitor
redis-cli monitor komutunu bir terminalde açık tutup başka bir yerden siteyi gezerseniz, GET ve SET komutlarının aktığını, wp_options ve benzeri anahtarların Redis'e yazıldığını gerçek zamanlı görürsünüz. Bu, "veritabanı yerine Redis'e gidiyor" cümlesinin gözle görülür kanıtıdır.
Redis'te ne kadar veri biriktiğini ve isabet oranını görmek için:
# Genel istatistikler — isabet/kayıp oranı, bellek kullanımı
redis-cli info stats | grep keyspace
# Kaç anahtar var
redis-cli dbsize
# Bellek kullanımı
redis-cli info memory | grep used_memory_human
keyspace_hits değerinin keyspace_misses değerine göre yüksek olması iyi bir işarettir; önbellek gerçekten iş görüyor demektir. WordPress yönetici panelindeki Object Cache ekranı da aynı isabet oranını yüzde olarak gösterir. Sağlıklı bir sitede bu oran genellikle yüzde 90'ın üzerindedir.
Somut kazanımı ölçmek için sorgu sayısını karşılaştırın. Geçici olarak wp-config.php dosyasına define('SAVEQUERIES', true); ekleyip bir tema fonksiyonuyla get_num_queries() değerini alt bilgide yazdırabilirsiniz. Redis kapalıyken 80-120 sorgu gören bir WooCommerce ürün sayfasının, Redis açıldığında 20-40 sorguya inmesi tipik bir sonuçtur. Testiniz bittiğinde SAVEQUERIES satırını mutlaka kaldırın, çünkü açık kalırsa bellek tüketir.
WooCommerce ve Üyelik Sitelerinde Gerçek Fark#
Redis nesne önbelleğinin parladığı yer tam olarak buradadır. Statik bir tanıtım sitesinde sayfa önbelleği zaten işi büyük ölçüde bitirir; nesne önbelleğinin katkısı görece küçüktür. Ama sepet, hesap, üyelik seviyesi, kupon, stok gibi kişiye özel ve sürekli değişen bileşenler devreye girdiğinde tablo tümüyle değişir.
WooCommerce'i düşünün. Sepette ürün olan bir kullanıcı için sayfa önbelleği devre dışı kalır, çünkü herkese aynı HTML verilemez. Bu durumda her sayfa yüklemesi PHP'yi baştan çalıştırır ve WooCommerce ayarlarını, ürün meta verilerini, vergi/kargo kurallarını, oturum verisini veritabanından tekrar tekrar çeker. Redis bu verileri önbelleğe aldığında, aynı sayfa yükü artık MySQL'i onlarca sorguyla meşgul etmek yerine Redis'ten mikrosaniyelerle okur. Sonuç: satın alma yolundaki (sepet, ödeme) gecikme belirgin şekilde düşer ve sunucu aynı anda çok daha fazla eşzamanlı müşteriyi kaldırabilir.
Aynı mantık üyelik siteleri, forumlar, LMS (kurs) platformları ve yoğun yorum trafiği olan haber siteleri için de geçerlidir. Bu sitelerde kullanıcıların büyük kısmı giriş yapmış durumdadır ve sayfa önbelleğinden yararlanamaz. Kabaca faydayı şöyle özetleyebiliriz:
| Site tipi | Sayfa önbelleği faydası | Redis nesne önbelleği faydası |
|---|---|---|
| Statik tanıtım / blog | Çok yüksek | Düşük–orta |
| Yoğun yorumlu haber sitesi | Orta | Yüksek |
| WooCommerce mağaza | Düşük (sepet/hesap atlar) | Çok yüksek |
| Üyelik / LMS / forum | Çok düşük | Çok yüksek |
Kritik nokta şu: WooCommerce'te trafiğin bir kısmı her zaman "giriş yapmış" haldedir ve o kısım tamamen PHP + veritabanı yüküne biner. Redis, işte o en pahalı isteklerin maliyetini düşürür. Yüksek trafikli bir mağaza yürütüyorsanız Redis'i lüks değil, altyapının temel bir parçası olarak görmek gerekir. Böyle bir yük için kaynakları garantili bir VDS sunucu ya da yönetimini bize bırakabileceğiniz bir sanal sunucu çoğu zaman paylaşımlı bir plandan çok daha isabetli bir tercihtir.
Önbelleği Temizleme ve Yaygın Sorunları Çözme#
Redis nesne önbelleği bir kez kurulduğunda çoğunlukla kendi kendine çalışır, ama iki durumda müdahale gerekir: kod/tema değişikliğinden sonra bayat veri kalması ve nadiren bağlantı hataları.
Önbelleği temizlemek için en pratik yol WP-CLI'dır:
# WordPress nesne önbelleğini temizle (Redis'i de kapsar)
wp cache flush
# Yalnızca Redis eklentisi üzerinden temizleme
wp redis flush
Yönetici panelindeki Object Cache ekranında da "Flush Cache" düğmesi aynı işi yapar. Bir eklentiyi güncelledikten, ayar değiştirdikten veya "değişikliğim neden görünmüyor" dediğiniz bir anda ilk yapacağınız şey önbelleği temizlemek olmalı. Redis'in tamamını sıfırlamak isterseniz redis-cli flushdb komutu o veritabanı numarasındaki her şeyi siler; ancak aynı Redis'i başka siteler kullanıyorsa bu komut onları da etkiler, dikkatli olun.
Sık karşılaşılan sorunlar ve çözümleri:
- "Redis'e bağlanılamıyor" uyarısı: Genellikle
phprediseklentisinin yüklü olmaması veya Redis servisinin kapalı olmasından kaynaklanır.php -m | grep redisvesystemctl status redis-serverile ikisini de doğrulayın. - Bağlantı zaman aşımları:
WP_REDIS_TIMEOUTdeğeri çok düşükse yoğun anlarda kopma yaşanabilir. Değeri 1'den 2-3 saniyeye çıkarmayı deneyin. - Bellek dolması ve anahtar atılması: Redis'e
maxmemorysınırı veallkeys-lruçıkarma politikası verilmelidir, aksi halde bellek dolunca beklenmedik davranışlar görülür. Sunucu tarafındakiredis.confiçindemaxmemory 256mbvemaxmemory-policy allkeys-lruiyi bir başlangıçtır. - Değişiklikler bir türlü yansımıyor: Katmanlı önbellek söz konusuysa (sayfa önbelleği + Redis + CDN) hepsini sırayla temizlemek gerekir. Sadece Redis'i temizlemek yetmeyebilir.
object-cache.php drop-in dosyasını manuel silmek zorunda kalırsanız (örneğin taşıma sırasında), wp redis disable komutu bunu güvenli biçimde yapar. Site taşıma sürecinde bu drop-in dosyasının hedef sunucuda yanlış bir Redis adresine işaret etmesi klasik bir hatadır; taşıma sonrası mutlaka wp redis status ile kontrol edin. Bu tür geçişleri sorunsuz yürütmek için site taşıma hizmetimiz ve düzenli yedekleme altyapımız işinizi kolaylaştırır.
Sıkça Sorulan Sorular#
Redis nesne önbelleği sayfa önbelleğinin yerine geçer mi?#
Hayır, ikisi birbirini tamamlar, biri diğerinin yerini tutmaz. Sayfa önbelleği hazır HTML'i servis ederek PHP'yi hiç çalıştırmaz; nesne önbelleği ise PHP çalışırken veritabanı yükünü azaltır. En iyi sonucu ikisini birlikte kurarak alırsınız: statik sayfalar sayfa önbelleğinden, giriş yapmış kullanıcı ve WooCommerce trafiği ise Redis'ten fayda görür.
Redis kurmak için mutlaka VPS veya sunucu mu gerekir?#
Kendi başınıza Redis kurup yapılandırmak için sunucu düzeyinde erişim gerekir, çünkü Redis bir sistem servisidir. Ancak Redis'in kurulu ve hazır sunulduğu bir hosting paketi kullanıyorsanız sunucuya hiç dokunmadan yalnızca eklenti ve wp-config.php adımlarıyla devreye alabilirsiniz. Clou.TR planlarında Redis desteğini hazır bulur, tam kontrol isterseniz VDS ya da sanal sunucuya geçebilirsiniz.
Redis Object Cache eklentisi ücretsiz mi?#
Evet, Redis Object Cache eklentisinin temel sürümü tamamen ücretsizdir ve çoğu site için fazlasıyla yeterlidir. Kurulum, wp-config.php bağlantısı ve temizleme özelliklerinin hepsi ücretsiz sürümde bulunur. Geliştirici, çok sunuculu ve yüksek erişilebilirlik senaryoları için ayrıca ücretli bir Pro sürüm de sunar, ancak tek sunuculu tipik bir WordPress kurulumunda buna ihtiyaç duymazsınız.
Redis'in çalıştığını nasıl anlarım?#
En hızlı yol yönetici panelindeki Object Cache ekranında "Connected" durumunu ve isabet oranını görmektir. Komut satırında wp redis status bağlantıyı, redis-cli info stats ise keyspace_hits ve keyspace_misses değerlerini gösterir. İsabet sayısı kayıp sayısına göre belirgin şekilde yüksekse önbellek gerçekten iş görüyordur; ayrıca redis-cli monitor ile siteyi gezerken anahtarların yazıldığını canlı izleyebilirsiniz.
Bir Redis sunucusunu birden fazla WordPress sitesi paylaşabilir mi?#
Evet, ama anahtarları birbirinden ayırmanız şarttır. Her site için wp-config.php içinde farklı bir WP_CACHE_KEY_SALT öneki tanımlayın ya da her siteye 0 ile 15 arasında farklı bir WP_REDIS_DATABASE numarası verin. Bu ayrımı yapmazsanız siteler birbirinin önbelleğini ezer ve yanlış veriler görünür. Ayrım doğru yapıldığında tek bir Redis örneği onlarca siteye rahatça hizmet edebilir.
Redis çökerse sitem kapanır mı?#
Hayır, Redis Object Cache eklentisi bağlantı kurulamadığında sessizce WordPress'in varsayılan (kalıcı olmayan) önbelleğine geri düşer. Yani Redis servisi durursa siteniz çökmez, yalnızca nesne önbelleği devre dışı kaldığı için veritabanı yükü ve yanıt süreleri geçici olarak artar. Bu nedenle Redis'i izlemek ve yeniden başlatmayı otomatikleştirmek iyi bir uygulamadır; sunucu yönetimini bize bırakırsanız bu tür servisleri biz izleriz.
Kapanış#
Redis nesne önbelleği, sayfa önbelleğinin ulaşamadığı yeri (giriş yapmış kullanıcıları, sepetleri, kişiye özel içeriği) hızlandıran ve veritabanınızı gereksiz sorgulardan kurtaran güçlü ama kurulumu şaşırtıcı derecede basit bir katmandır. Sunucuda Redis hazır olduktan sonra iş, Redis Object Cache eklentisini kurmak, wp-config.php içine host/port bilgisini tanımlamak ve bağlantıyı doğrulamaktan ibarettir. WooCommerce, üyelik ve forum gibi dinamik sitelerde alacağınız kazanç, harcadığınız birkaç dakikayla kıyaslanamayacak kadar büyüktür.
Sitenizin yükü Redis'i zorunlu kılıyorsa altyapınızı buna göre kurmak akıllıca olur. Redis'in hazır sunulduğu WordPress'e uygun hosting paketlerimize göz atabilir, daha fazla kaynak ve tam kontrol istiyorsanız VDS sunucularımızı inceleyebilir, kurulum ve bakımı bize devretmek isterseniz sunucu yönetimi ve WordPress bakım hizmetlerimizle güvende ilerleyebilirsiniz. Doğru yapılandırılmış bir Redis katmanı, siteniz büyüdükçe farkını en çok hissettiğiniz yatırımlardan biri olacaktır.