WooCommerce İçin Nesne Önbelleği Seçimi
Bir WooCommerce mağazasında ziyaretçiler hızlı gezinirken oturum açmış müşterilerin sepeti yavaş yüklenebilir. Bu örnek durumda tek başına sunucu alarmı olmaması, sorunun önbellek olduğunu kanıtlamaz: sorgu süreleri, PHP işçileri ve eklenti davranışı da incelenmelidir. Kalıcı nesne önbelleği, tekrarlanan veritabanı sorgularını azaltabilecek katmanlardan biridir. Redis ile Memcached arasında seçim yaparken TTL, bellek sınırı ve eviction davranışını uygulamanın veri doğruluğuyla birlikte değerlendirmek gerekir.
Bu rehber, WordPress ve WooCommerce için iki önbellek sisteminin farklarını, geçerlilik sürelerini ve bellek dolduğunda uygulanacak politikaları açıklar. Katalog sorgusu gibi yeniden üretilebilen verilerle sepetin kalıcı oturum kaydı aynı şekilde yönetilmez. Amaç tek bir teknolojiyi kazanan ilan etmek değil; kullandığın drop-in eklentisinin desteğini, veri değişimlerini ve ölçülen yükü birlikte ele almaktır. Aşağıdaki süreler evrensel ayarlar değil, yalnızca uygun verilerde denenebilecek örneklerdir.
Kalıcı Nesne Önbelleği Nasıl Çalışır?
Hesaplanan Sonuçları Yeniden Kullanma
WordPress, ayarlar ve içerik verileri için veritabanı sorguları çalıştırır. Kalıcı nesne önbelleği, yeniden kullanılabilen sorgu sonuçlarını ve hesaplanmış değerleri ayrı bir bellek hizmetinde tutar. Aynı sonuç tekrar istendiğinde geçerli önbellek girdisi kullanılabilir; böylece tekrarlanan veritabanı işi azalabilir.
İstekler Arasında Önbellek Kullanımı
WordPress’in varsayılan nesne önbelleği bir HTTP isteği süresince yaşar. Kalıcı nesne önbelleği verileri Redis veya Memcached gibi ayrı bir hizmette tutarak sonraki isteklerin de kullanmasını sağlar. Buradaki kalıcı sözcüğü diske yazma veya yeniden başlatma sonrasında veriyi koruma garantisi değildir. WordPress’in nesne önbelleği dokümantasyonu, bu ayrımı ve gerekli drop-in desteğini açıklar.
WooCommerce’de Dinamik Verilerin Önbelleği
Sepet, Stok ve Fiyat Değişiklikleri
Sepet, stok, fiyat ve indirimler değiştikçe önbelleğin de doğru biçimde geçersiz kılınması gerekir. Nesne önbelleği, tüm sayfanın HTML olarak saklanmasından farklıdır: ürün sorguları ve ortak ayarlar gibi yeniden üretilebilen sonuçları paylaşabilir. Ancak her sorguyu otomatik olarak hızlandırmaz; kazanç, aynı verinin yeniden kullanılmasına ve entegrasyonun doğru çalışmasına bağlıdır. Sepet, ödeme ve hesabım sayfaları ortak tam sayfa önbelleğinden çıkarılmalıdır.
Yavaş İşlemleri ve Veri Doğruluğunu Ölçme
Önce hangi işin yavaş olduğunu ölç: kategori listeleme, ürün arama veya oturum açmış müşterinin sepeti aynı yol değildir. Sepet doğruluğunu yalnızca kısa TTL sağlamaz. Müşteri anahtarlarının ayrılması, değişikliklerde geçersiz kılma ve WooCommerce’in kalıcı oturum depolaması korunmalıdır. Daha seyrek değişen ortak sonuçlarda uzun süreler denenebilir; fiyat veya stok değişince eski sonucu kaldıran mekanizma yine gerekir.
Redis Ne Zaman Tercih Edilir?
TTL ve Bellek Tahliye Politikaları
Redis’te anahtarların geçerlilik süresi için TTL, bellek dolduğunda elenecek anahtarlar için eviction politikaları kullanılır. Uygulamanın belirlediği sürelerle örnek düzeyindeki bellek politikasını birlikte değerlendirmek gerekir. Seçenekler için Redis’in tahliye (eviction) politikaları belgesine bakabilirsin.
Katalog ve Arama Sonuçlarında Redis
Redis, yeniden üretilebilen katalog ve arama sonuçlarının bellek basıncı altında nasıl eleneceğini seçmek istediğinde esneklik sağlar. Örneğin özel bir kategori sorgusuna on dakikalık üst süre koyarken ürün güncellemesinde bu sonucu hemen geçersiz kılabilirsin. Bu, sepet oturumunu on dakika önbellekte tutmakla aynı işlem değildir. TTL’yi genellikle uygulama veya drop-in belirler; Redis kendiliğinden WordPress’in ürün, sepet ve kategori gruplarını tanımaz.
Depolama Tarzı ve İzleme
Redis’in INFO çıktısı bellek kullanımı, isabetler, kaçırmalar ve elenen anahtarlar için yararlıdır. Bunlar sunucu düzeyindeki istatistiklerdir; hangi WordPress grubunun maliyet oluşturduğunu tek başına göstermez. Grup düzeyinde inceleme için drop-in ölçümleri veya uygulama izleme gerekir. Böylece TTL değişikliklerini tahminle değil, istek süreleri ve veritabanı yüküyle birlikte değerlendirebilirsin.
Memcached Ne Zaman Tercih Edilir?
Bellekte Anahtar-Değer Depolama
Memcached, yeniden üretilebilen değerleri RAM’de saklayan bir anahtar-değer önbelleğidir. WordPress veya WooCommerce için uygunluğu, kullanılan drop-in’in desteğine ve iş yükündeki nesnelerin yeniden kullanımına bağlıdır. Mevcut altyapıyla uyumlu, odaklı bir önbellek hizmeti gerektiğinde değerlendirilebilir.
İş Parçacıkları ve Bellek Yönetimi
Memcached, tekrar kullanılan küçük nesneler için çok iş parçacıklı bir bellek önbelleğidir. Bellek yönetimi slab sınıfları ve LRU temelli mekanizmalar kullanır; bu, Redis’in LFU politikasındaki kullanım sıklığı ölçütüyle aynı değildir. Büyük nesneler ve slab dağılımı bellek verimini etkileyebilir. Redis kadar geniş bir eviction politikası menüsü sunmaz. Temel çalışma modeli için Memcached’in resmi sitesi ve kurulu sürümün yapılandırması birlikte incelenebilir.
TTL ve Eviction İlişkisi
TTL ve Veri Geçerlilik Süresi
TTL (time-to-live), kaydın kullanılabileceği üst süreyi belirtir; kaydın o süre boyunca bellekte kalacağını garanti etmez. Eviction veya önbellek temizliği kaydı daha erken kaldırabilir. Çok kısa TTL tekrar hesaplama yükünü artırabilir; çok uzun TTL ise geçersiz kılma eksikse eski verinin görünmesine yol açar. Güncel fiyat ve stok için esas mekanizma değişiklik anında doğru invalidation’dır.
Örneğin seyrek değişen ve ürün güncellemesinde geçersiz kılınan özel bir kategori sonucu için birkaç dakikalık süre denenebilir. Bu bir WordPress genel ayarı değildir. Çekirdek ve WooCommerce anahtarlarının yaşam döngüsünü sırf bu örneğe uydurmak için değiştirme. Kişiye özel çıktılarda kısa süreye güvenmek yerine müşteri bağlamını, erişim yetkisini ve geçersiz kılmayı doğrula. Kampanya sırasında TTL’yi gereksiz kısaltmak veritabanı yükünü artırabilir.
Bellek Dolduğunda Kayıtların Elenmesi
Eviction, ayrılan bellek dolduğunda kayıtların TTL bitmeden elenmesidir. Redis’te allkeys-lru yakın zamanda kullanılmayan, allkeys-lfu ise az kullanılan anahtarları yaklaşık yöntemlerle seçer. volatile-ttl yalnızca süreli anahtarlar arasında kalan TTL’si en kısa olanları eler. Bu nedenle kısa TTL, kritik veriyi koruyan bir öncelik değildir. Kuyruk veya oturumun tek kalıcı kopyası, serbestçe elenen nesne önbelleğiyle aynı yaşam döngüsüne konmamalıdır.
Eşzamanlı TTL Bitişlerinin Yükü
Çok sayıda önbellek girdisinin TTL’si aynı anda biterse sonuçları yeniden hesaplayan istekler veritabanına eşzamanlı yük oluşturabilir. Süresini uygulamanın yönettiği özel sonuçlarda, kabul edilebilir eskilik sınırını aşmadan TTL’ye küçük bir rastgelelik eklemek veya süreleri dağıtmak yenilemeleri zamana yayabilir.
WordPress’te Nesne Önbelleği Kurulumu
Drop-in ve Bağlantı Gereksinimleri
WordPress’te kalıcı nesne önbelleği için wp-content/object-cache.php drop-in’i, erişilebilir bir önbellek hizmeti ve uyumlu PHP istemcisi gerekir. Yalnızca WP_CACHE tanımlamak Redis veya Memcached bağlantısı kurmaz. Staging ortamında eklentinin bağlantı durumunu kontrol et; ürün güncelleme, kupon, sepet, ödeme ve iki ayrı müşterinin oturumlarını dene. Önbellek hizmeti erişilemez olduğunda uygulamanın davranışını da doğrula.
Redis Object Cache Ayarları
Aşağıdaki örnek Redis Object Cache eklentisinin belgelenmiş sabitlerini kullanır; her drop-in için geçerli değildir. WP_REDIS_PREFIX, aynı hizmeti paylaşan sitelerin anahtar çakışmasını önlemeye yardımcı olur. Bu önek bir erişim kontrolü veya ayrı bellek kotası sağlamaz. Eklentinin WP_REDIS_MAXTTL seçeneği genel bir üst sınırdır; sepet ve katalog için otomatik, ayrı süreler tanımlamaz.
// wp-config.php: Redis Object Cache eklentisi için örnek
// Eklenti ve object-cache.php ayrıca etkinleştirilmelidir.
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PREFIX', 'magaza_prod_');
// Gerekiyorsa WP_REDIS_MAXTTL için eklenti belgesine bakın.
// Genel TTL üst sınırını ölçmeden veya iş mantığını incelemeden değiştirmeyin.
Redis’in maxmemory sınırı ve maxmemory-policy ayarı örnek düzeyindedir; WordPress önbellek gruplarına ayrı kota veya dokunulmazlık tanımaz. Yalnızca yeniden üretilebilen nesnelerin bulunduğu bir örnekte allkeys-lru veya allkeys-lfu değerlendirilebilir. volatile-* politikalarında elenebilir anahtarlar yeterli değilse yazmalar bellek hatası alabilir. Oturum, kuyruk ve nesne önbelleği farklı dayanıklılık gerektiriyorsa ayrı Redis örnekleri kullan; mantıksal veritabanları bu kaynak ayrımını sağlamaz.
Memcached Drop-in Ayarları
Memcached için de sunucu adresi, PHP uzantısı ve anahtar öneki kullandığın drop-in’in belgesine göre ayarlanır. Evrensel bir WordPress Memcached sabiti yoktur. Hizmeti yalnızca uygulamanın erişmesi gereken ağ veya sokette dinlet; internete açık bırakma. Bellek için -m nesne depolama miktarını belirler, sürecin toplam RAM tüketimi bunun üzerine çıkabilir.
// Yalnızca WP_CACHE_KEY_SALT destekleyen Memcached drop-in'leri için:
define('WP_CACHE_KEY_SALT', 'magaza_prod_');
// Sunucu adresini ve PHP istemcisini seçilen drop-in'in belgesine göre ayarlayın.
// Bu sabit tek başına Memcached bağlantısı veya kalıcı önbellek oluşturmaz.
Memcached’te kayıtların süreleri uygulama tarafından gönderilir ve bellek basıncı nedeniyle daha erken elenebilirler. Uzun TTL de kısa TTL de kaydı koruma garantisi vermez. WooCommerce’in oturum depolamasını, yeniden üretilebilen nesne önbelleğinden ayır. Özel sorgu sonuçlarında doğru geçersiz kılmayı kurduktan sonra süreyi kullanım sıklığına göre ayarla; kayıp önbellek girdisi geldiğinde kod sonucu yeniden oluşturabilmelidir.
Önbellek Gruplarını Yönetme
WordPress nesne önbelleği API’si anahtar gruplarını destekler; bunların kalıcılığı ve grup bazında temizlenmesi drop-in desteğine bağlıdır. Grup adının bulunması, grup bazında TTL veya Redis eviction önceliği tanımlanabildiği anlamına gelmez. Grup temizliği kullanacaksan wp_cache_supports('flush_group') ile desteği kontrol et. Desteksiz bir işlem daha geniş önbelleği temizleyebilir.
Örnek Senaryolarla Redis ve Memcached Seçimi
Senaryo 1: Kampanya ve Arama Trafiği
Kampanya sırasında kategori ve arama sorgularının artması, aynı sonuçların tekrar kullanılma olasılığını yükseltebilir. Redis’in LRU veya LFU gibi politikaları ile Memcached’in LRU temelli davranışını temsilî trafik altında karşılaştır. Seçimi politika seçenekleri, drop-in uyumu, bellek kullanımı ve ölçülen yanıt sürelerine göre yap; ürün güncellemelerinde sonuçların doğru geçersiz kılındığını da doğrula.
Senaryo 2: Sepet ve Kişiselleştirme
Kişiselleştirilmiş sepet çıktısını başka bir müşterinin anahtarı altında saklamak, TTL çok kısa olsa bile hatalıdır. Müşteri ve oturum bağlamı doğru ayrılmalı; kupon, miktar, adres ve fiyat değişiklikleri ilgili hesapları geçersiz kılmalıdır. Sepet ve ödeme HTML’sini ortak sayfa önbelleğinden çıkar. Uygulamaya özel bir nesne önbelleği katmanı kullanacaksan WooCommerce’in oturum depolama ve geçersiz kılma davranışını koru; yalnızca önek eklemek bu gereklilikleri sağlamaz.
Senaryo 3: Az Değişen Katalog
Ürün değişimi nadir ve trafik sakinse basit bir kurulum yeterli olabilir. Memcached’in mevcut altyapıyla uyumu veya Redis drop-in’inin yönetim kolaylığı tercihi belirleyebilir. Yine de “kur ve unut” yaklaşımı doğru değildir: sürüm güncellemelerini, bağlantı hatalarını, isabet oranını ve yeniden başlatma sonrasındaki yükü izle. Düşük trafik, bozuk geçersiz kılma kurallarını kendiliğinden düzeltmez.
TTL ve Eviction İçin Pratik Ayar Fikirleri
Katalog ve Listelemeler
Tekrar kullanılan kategori ve arama sonuçları iyi önbellek adayları olabilir. Özel bir katalog sonucu için birkaç dakikalık TTL bir başlangıç denemesidir; ürün, fiyat, görünürlük veya stok değiştiğinde ilgili anahtar ayrıca geçersiz kılınmalıdır. Arama parametreleri, dil, vergi ve müşteri bağlamı sonucu değiştiriyorsa bunları da anahtar tasarımında hesaba kat.
Ürün Sayfalarındaki Sorgular
Benzer ürünler veya yeni eklenenler gibi blokların sorgu maliyeti ve yeniden kullanım oranını ölç. Uygun sonuçları önbelleğe almak toplam yükü azaltabilir; ancak her küçük sorgu için ek ağ çağrısı kazanç sağlamaz. Süreyi belirlerken ürün değişikliklerinde doğru temizlenmeyi ve önbellek kaçırıldığında yeniden hesaplamanın maliyetini birlikte değerlendir.
Sepet ve Kullanıcıya Özel Veriler
Sepet için öncelik süreyi küçültmek değil, doğru oturum ve değişiklik yönetimidir. Hassas çıktılar ortak HTML önbelleğine girmemeli; nesne katmanındaki kayıtlar ise ilgili kullanıcı bağlamından ayrılmamalıdır. Kısa TTL, eski fiyatın kısa süre görünmesini veya müşteriler arasında veri karışmasını kabul edilebilir yapmaz. Ödeme sırasında WooCommerce’in doğrulama akışını koru.
Bellek Baskısı ve Eviction Kontrolleri
Redis politikası bir grubu “kritik” adı taşıdığı için korumaz; allkeys-* kapsamındaki tüm anahtarlar elenebilir. Kısa TTL ile sık yenileme de koruma sağlamaz. Memcached’in -m değeri toplam süreç belleğine katı üst sınır değildir. Bellek, isabet oranı, nesne boyutları ve tahliye hızını beraber izle; RAM artırmak veya TTL değiştirmek için önce baskının kaynağını belirle.
Önbellek İzleme ve Sorun Giderme
Performans Değişikliklerini Ölçme
İsabet oranındaki düşüş; kısa TTL, kapasite baskısı, dağıtım sonrası soğuk önbellek veya farklı anahtar üretimi gibi nedenlerden kaynaklanabilir. Aynı trafik altında CPU artması tek başına TTL teşhisi değildir. Geciken güncellemelerde de önce geçersiz kılmayı ve HTML/CDN katmanını kontrol et. Bir seferde tek ayarı değiştirip istek süresi, hata oranı ve sorgu sayısını karşılaştır.
Redis INFO ve Memcached Stats
Redis için yetkili bağlantında redis-cli INFO ile keyspace_hits, keyspace_misses, evicted_keys ve bellek değerlerini inceleyebilirsin. Memcached stats komutunu kendi protokolü üzerinden kabul eder; bu, memcached stats adlı bir kabuk komutu değildir. Bu sunucu ölçümlerini WordPress drop-in ve uygulama izleme verileriyle birleştir; yalnızca sunucu çıktısı grup düzeyindeki maliyeti açıklamaz.
CDN, Sayfa Önbelleği ve PHP-FPM
CDN, sayfa önbelleği ve PHP-FPM ayarları, nesne önbelleğinden farklı işlem katmanlarını etkiler. Bu katmanları birlikte değerlendirmek için WordPress için sunucu tarafı optimizasyon rehberine bakabilirsin. Darboğazın hangi katmanda olduğunu ölçmeden yalnızca Redis veya Memcached ayarlarını değiştirmek yeterli olmayabilir.
Anahtar Önekleri ve Grup Yönetimi
Site ve Ortama Göre Anahtar Önekleri
Aynı Redis veya Memcached’i paylaşan sitelerde her site ve ortam için ayrı anahtar öneki seçmek çakışmaları önlemeye yardımcı olur. Ancak önekler kimlik doğrulama veya güvenlik sınırı değildir ve geniş kapsamlı bir flush’tan korumayabilir. Üretim ile staging’in yanlışlıkla aynı ad alanını kullanmadığını kontrol et; birbirine güvenmeyen uygulamalar için erişim ve hizmet ayrımını ayrıca tasarla.
Grupların Geçersiz Kılınması
Ürün, kategori, kullanıcı ve ayar anahtarlarının hangi kod tarafından üretildiğini ve hangi olaylarda silindiğini belirle. Bir gruba isim vermek veya kısa TTL seçmek, veri tutarlılığı sağlamaz. Core ve WooCommerce’in mevcut yaşam döngüsünü koru; özel gruplarda anahtar sürümleme ve desteklenen hedefli silme yöntemlerini kullan. Redis tarafındaki eviction politikasını bu uygulama gruplarıyla karıştırma.
CDN, HTML ve Nesne Önbelleğini Birlikte Kullanma
Önbellek Katmanlarının Görevleri
CDN statik dosyaların dağıtımını, HTML önbelleği uygun sayfaların tamamını, nesne önbelleği ise yeniden kullanılabilen uygulama verilerini yönetir. WooCommerce’de sepet, ödeme ve hesap sayfalarını ortak HTML önbelleğinden çıkar. Nesne önbelleği bu sayfalardaki uygun hesaplamalarda da kullanılabilir; müşteri bağlamı ve geçersiz kılma kuralları korunmalıdır.
Resmi Kaynaklar
Çalışma modeli ve yapılandırma ayrıntıları için WordPress nesne önbelleği dokümantasyonunu, Redis tahliye politikalarını ve Memcached’in resmi sitesini inceleyebilirsin. Kurulu sürüm ve seçilen drop-in’in desteklediği özellikleri bu kaynaklarla karşılaştır.
Seçim ve Doğrulama Kontrolü
Redis ile Memcached arasındaki seçim, drop-in desteği, iş yükü, veri yaşam döngüsü ve işletim gereksinimlerine bağlıdır. Redis daha fazla tahliye politikası seçeneği sunar; Memcached odaklı bir bellek önbelleğidir. Hangisinin uygun olduğunu aynı koşullardaki doğruluk ve performans ölçümleriyle belirle.
Başlangıçta drop-in uyumluluğunu ve geçersiz kılma davranışını doğrula. Katalog sonuçları için ölçüme dayalı TTL seç; sepet ve oturum doğruluğunu kısa süreye bırakma. Yalnızca yeniden üretilebilen veriler içeren Redis örneğinde uygun allkeys politikasını değerlendir, bellek için sistem payı bırak. Memcached’te nesne boyutunu ve toplam süreç belleğini izle. Son olarak önbellek soğukken ve hizmet erişilemezken mağazanın davranışını staging ortamında kontrol et.
Kararı değerlendirirken aynı trafik ve veri değişimi senaryolarını karşılaştır: ürün güncelleme, sepet miktarı değiştirme, kupon uygulama ve müşteri değişimi. İsabet oranı yükselse bile eski içerik veya yanlış sepet sonucu varsa ayar başarılı değildir. İşlevsel doğruluk korunurken sorgu yükü ve yanıt süresi iyileşiyorsa seçtiğin yapı mağazanın gereksinimine cevap veriyor demektir.





