İçindekiler
- 1 O Mağaza Sabahı: Hızlı Olmak İçin Kimin Kapısını Çalacaksın?
- 2 Kalıcı Nesne Önbelleği Nedir, Neyi Dert Edinmene Gerek Yok?
- 3 WooCommerce Dünyasında Önbellek Neden Daha Hassas?
- 4 Redis’i Ne Zaman Tercih Etmeli? “Anahtarların Hikâyesini” Duyduğunda
- 5 Memcached Ne Zaman Nefes Aldırır? “Basit Tut, Hızlı Olsun” Dediğinde
- 6 TTL Nedir, Ne Kadar Olmalı ve Eviction’la Nasıl Dans Eder?
- 7 WordPress’te Uygulama: Adım Adım, Sakin ve Temiz
- 8 Gerçek Sahne: Küçük Senaryolarla “Redis mi Memcached mi?” Sorusu
- 9 TTL ve Eviction İçin Pratik Ayar Fikirleri
- 10 İzleme, Ölçme ve Sakin Sorun Giderme
- 11 Küçük Notlar: Anahtar İsimleri, Önekler ve Dağınıklığı Önlemek
- 12 Birlikte Çalıştığında Güzel: CDN, HTML Cache ve Nesne Önbelleği
- 13 Kaynaklara Bakmak İstersen
- 14 Kapanış: İki Güzel Araç, Bir Akıllı Yol Haritası
O Mağaza Sabahı: Hızlı Olmak İçin Kimin Kapısını Çalacaksın?
Hiç sabah kahvenle ekranın başına oturup, dükkânını açar gibi WordPress yönetim panelini açtığında sayfaların ağırlaştığını hissettin mi? Bir şeyler yolunda değil, ama sunucuda kırmızı alarmlar da yok. İşte tam o an, aklıma geçen kış yaşadığım bir WooCommerce projesi geliyor. Sepet sayfası bazen kuş gibi, bazen çamura saplanmış gibiydi. Sunucu aynı, trafik benzer, tema değişmedi. Sihirli kelimeler çevrede dolaşıyordu: kalıcı nesne önbelleği, TTL, eviction. “Redis mi Memcached mi?” sorusuysa tam ortada duruyordu.
O gün şöyle düşündüm: “Burada mesele tek bir teknolojinin şampiyon olması değil; dükkânın ritmi, veri tiplerin, trafik dalgaların ve bakım alışkanlığın… Hepsi bir arada konuşuyor.” Bu yazıda tam da bunu yapacağız. WooCommerce’li bir WordPress’in, sayfa yükü altında nasıl derin nefes aldığını, hangi durumda hangi önbelleği tercih etmenin daha akıllıca olduğunu ve TTL ile eviction ayarlarını nasıl sakin ve güvenli şekilde yapabileceğini konuşacağız. Kısayol yok; ama yol zahmetsiz olsun diye hikâyeler, canlı örnekler ve birkaç pratik komut paylaşacağım.
Kalıcı Nesne Önbelleği Nedir, Neyi Dert Edinmene Gerek Yok?
Birkez Hesapla, Sonra Defalarca Kullan
WordPress, küçücük bir bileşeni bile göstermek için çoğu zaman veritabanına uğrar. Fena değil, ama sürekli misafirliğe giden biri gibi: kapı aç-kapat, ayakkabı çıkar-giy… Yorar. Kalıcı nesne önbelleği şu işi yapıyor: Belli hesapların ve soruların yanıtlarını RAM’de tutuyor. Böylece aynı şey tekrar istendiğinde veritabanına inmiyorsun, RAM’den kapıp çıkıyorsun. Sonuç: daha az bekleme, daha az gürültü.
“Kalıcı” Neden Önemli?
PHP süreci bitince hafıza da boşalıyor, biliyorsun. Kalıcı nesne önbelleği, bu hafızayı PHP’nin yaşam döngüsünün dışına taşıyor; başka bir deyişle istekler arası belleği koruyor. Bu yüzden Redis ve Memcached gibi servisler devreye giriyor. Bir kere yaz, sonra sayfalar akarken tekrar tekrar oku. WordPress’in Nesne Önbelleği mantığına göz atmak istersen, WordPress’in Nesne Önbelleği mantığına göz atmak iyi bir başlangıç olur.
WooCommerce Dünyasında Önbellek Neden Daha Hassas?
Sepet, Stok, Fiyat: Hepsi Dinamik
WooCommerce, vitrin gibi görünse de arka tarafta küçük bir pazar yeridir. Sepetler sürekli değişir, stok azalıp çoğalır, kampanya biter başlar. Her şey “azıcık dinamik” değil, bayağı oynak. İşte bu yüzden bir sayfayı bütünüyle HTML olarak uzun süre saklamak çoğu zaman doğru değil. Ama nesne düzeyinde, yani daha küçük parçalarda önbellekleme yapmak enfes sonuç verir. Ürün sorguları, kategori sayımlar, kur ayarları, vergi oranları, küçük ama sık kullanılan veriler… Hepsi hızlanır.
“Ben Ne Önemsiyorum?” Sorusu
Senin için kritik olanı düşün. Hızlı kategori listeleme mi, kampanya döneminde patlayan arama istekleri mi, yoksa sepet akışı mı? Eğer konu sepetin doğruluğuysa, bazı verilerin kısa ömürlü olmasında ısrar etmen gerekir. Ama kategori ve menü gibi çok değişmeyen blokları daha uzun süre RAM’de tutmak, mağazanın genel hızını atar. Denge burada doğuyor.
Redis’i Ne Zaman Tercih Etmeli? “Anahtarların Hikâyesini” Duyduğunda
İnce Ayar İsteyenler İçin Esnek Oyun Alanı
Redis, anahtarların yaşamını yönetirken sana epey söz hakkı verir. Anahtarların ne kadar yaşayacağına dair TTL ayarlarını esnekçe kullanabilir, bellek dolduğunda hangilerinin elenmesi gerektiğini yöneten eviction politikalarını seçebilirsin. “Hangi anahtar öncelikli?” gibi sorulara cevap verebilmek bazen hayat kurtarır. Redis’in tahliye politikalarını görmek istersen, kısa ve anlaşılır bir özet için Redis’in tahliye (eviction) politikaları dokümanına bakmak işleri berraklaştırır.
WooCommerce’de Redis’in Güçlü Olduğu Anlar
Sepet, kullanıcıya özel öneriler, stok denetimleri gibi kalemlerin yanında, arama sonuçları veya kategori içerikleri gibi görece stabil blokları daha uzun süre saklamak istiyorsan Redis rahatlatır. Diyelim ki bir ürün kategorisinin sorgusunu 10 dakika tutmak işine çok yarıyor, ama sepet verisini birkaç dakika bile bekletmek istemiyorsun. Redis burada hem anahtar adlarını, hem ömürlerini, hem de “bellek dolarsa kimi bırakacağını” yönetmeyi kolaylaştırıyor. Bu hassasiyet, promosyon dönemlerinde adeta güvence gibi hissettiriyor.
Depolama Tarzı ve İzleme
Redis’in bir diğer artısı, kullanımını izleyebilmen. Basit komutlarla “hangi önbellek grubu şişmiş”, “hangi anahtarlar çok aktif” gibi bilgilere bakarsın. Bu sayede rastgele değil, veriye bakarak TTL ayarı yaparsın. Nedensiz tahmin yok, sakin denemeler var.
Memcached Ne Zaman Nefes Aldırır? “Basit Tut, Hızlı Olsun” Dediğinde
Hızlı, Hafif ve Sadeliği Sevenlere
Memcached, veriyi RAM’de tutma işini çok ciddiye alır ama üzerine fazla söz söylemez. Fazladan özellik deryasına girmez; “basit ve hızlı” mottosuyla çalışır. WooCommerce tarafında özellikle sık kullanılan, kısa ömürlü ama geniş hacimli küçük parçaların saklanması gerektiğinde, bu sadelik işine yarar. Kod tarafında karmaşıklıkla uğraşmak istemiyor ve anlaması kolay bir davranış istiyorsan, Memcached çok iyi bir dosttur.
Yoğun Trafikte Sessiz Kahraman
Memcached, gelen gideni fazla belli etmeden işi görür. Mağaza bir kampanyaya girdiğinde, ürün listelemeleri, menüler, basit sorgular ve çokça tekrar eden veriler RAM’den yağ gibi akar. Eviction konusu söz konusu olduğunda, genellikle en az kullanılan öğeleri bırakma mantığıyla ilerler ve fazla mikro yönetim istemezsin. “Benim önceliğim hız ve düşük karmaşıklık” diyorsan, Memcached tam buna cevap verir. Temel fikir ve sınırlamaları için Memcached’in çalışma biçimi ve sınırları özetlenmiş halde bulunur.
TTL Nedir, Ne Kadar Olmalı ve Eviction’la Nasıl Dans Eder?
TTL: Ömrü Kıvamında Bırakmak
TTL (time-to-live), bir önbellek kaydının ramdaki ömrüdür. Çok kısa tutarsan, her şey sık sık tazelenir ve beklediğin hız gelmeyebilir. Çok uzun tutarsan, değişen veriler geç yansır ve müşterin yanlış stok veya fiyat görür. Çözüm, veriyi doğasına göre yaşatmakta. Mesela:
Kategori ve menü gibi seyrek değişen bloklar birkaç dakika ile on beş dakika arası mutlu yaşar. Ürün sayfalarındaki ufak hesaplar (örneğin bir yardımcı sorgu) biraz daha kısa tutulabilir. Sepet ve kullanıcıya özel parçalar çok taze olmalı; dakikalar yerine saniyelerle düşünmek daha güvenli olur. Kampanya anlarında TTL’i biraz kısaltmak akla çok yatkın bir hareket.
Eviction: Bellek Dolduğunda Kibarca Uğurlamak
Bellek sonsuz değil. RAM dolunca birilerinin gitmesi gerekiyor. İşte eviction burada devreye giriyor. Redis, anahtarların atılma şeklini seçmene izin veriyor; kimi zaman sadece süresi dolmaya yakınları bırakmak, kimi zaman az kullanılanları kapıdan uğurlamak mantıklı olabilir. Memcached tarafında da daha basit ama pratik bir atma mantığı işler. Önemli olan, önceliğin ne olduğunu baştan belirlemek. “Sepet asla düşmesin, kategori düşerse en fazla bir sorgu daha çalışır” gibi bir yol haritası, karar anlarında seni yormaz.
Mağazanın Kalp Atışı: Trafik Dalgaları
Yoğun saatlerde aniden “önbellek seli” yaşanır. Eğer TTL’ler aynı dakikada bitiyorsa, hepsi birden tazelenmek ister ve veritabanına koro halinde yüklenir. Bu senkron bitişler sakıncalı olabilir. Çözüm, TTL’lere mini bir rastgelelik katmak veya farklı grupları farklı sürelerle ayarlamak. Böylece yenilemeler zamana dağılır, sunucu nefes almaya devam eder.
WordPress’te Uygulama: Adım Adım, Sakin ve Temiz
Başlangıç: Drop-in ve Basit Ayarlar
WordPress’te kalıcı nesne önbelleği için genellikle bir “drop-in” dosyası kullanılır: object-cache.php. Bu dosya, WordPress’in varsayılan hafıza kullanımını Redis veya Memcached’e yönlendirir. Yayın öncesi, sahnede prova yapar gibi staging bir ortamda denemek huzur verir. Bir iki sayfayı dolaş, sepet ekle, kupon kullan. Sonra üretime alırsın.
Redis İçin Küçük Bir Tatlı Ayarı
Redis kullanıyorsan, anahtarların birbiriyle karışmaması ve çok uzun yaşamaması için basit ayarlar iş görür. Örneğin wp-config.php tarafında bir önek (prefix) belirlemek, TTL sınırı koymak iyi fikir olabilir.
// wp-config.php örneği
define('WP_CACHE', true);
// Eşsiz bir önek; çoklu site veya aynı Redis'i paylaşan projeler için
define('WP_CACHE_KEY_SALT', 'magaza_2025_');
// Redis için örnek TTL sınırı (saniye)
// Kategori gibi gruplarda daha uzun, sepet gibi gruplarda daha kısa TTL ver.
// Bazı eklentiler grup bazlı ayar sağlar.
Redis sunucusunda da bellek sınırı ve politika seçmek gerekebilir. Aşağıdaki gibi düşünmek güvenli olabilir: “Sepetle ilgili anahtarlar mümkün olduğunca korunmalı, kategori anahtarları gerekirse elensin.” Bu durumda sepet anahtarlarına daha kısa ama daha sık güncellenen bir TTL verip, kategori anahtarlarını biraz daha uzun ama elenebilir yaparsın. Eviction tarafında Redis’in sunduğu politikalar arasından “az kullanılanları bırak” yaklaşımı, genellikle katalog ve arama sonuçlarında akışkanlık sağlar.
Memcached İçin Güzel Bir Sadelik
Memcached tarafında wp-config.php içinde yine bir önek belirlemek işleri temiz tutar. Sunucu tanımları genellikle eklenti ayarlarından yapılır. Memcached’in basit doğası, fazla oynamadan iş görmeyi sever. Önemli olan “Benimde bir sınırım var” diye hatırlayıp RAM boyutunu makul belirlemek ve gereksiz veri yığmamaktır.
// wp-config.php örneği
define('WP_CACHE', true);
define('WP_CACHE_KEY_SALT', 'magaza_2025_');
Memcached’te TTL yine anahtar bazında verilir. WooCommerce’de sepetle ilgili anahtarlar kısa; menü, kategori, küçük ayar kümeleri daha uzun ömürlü olabilir. Eğer bir şeyin yanlış zamanda düşmesini istemiyorsan, TTL’i fazla kısa tutma. Kısa ömür demek, sık tazeleme demek; bazen fazla masrafa dönüşür.
Grup Mantığıyla Temiz Ayrım
WordPress’te bazı eklentiler, anahtarları “gruplara” ayırmana izin verir. Örneğin ürün sorguları farklı, sepetle ilgili fragmanlar farklı grupta saklanır. Böylece TTL’leri gruplara göre ayarlamak kolaylaşır. Grup bazlı çöp temizliği ve ömür yönetimi, mağazayı ayakta tutan küçük bir sihir gibidir.
Gerçek Sahne: Küçük Senaryolarla “Redis mi Memcached mi?” Sorusu
Senaryo 1: Kampanya İnişi ve Arama Sıcaklığı
Yeni sezon indirime girdin, arama kutusu hiç boş kalmıyor. Kategori sorguları artmış, müşteriler gezinirken sayfalar arası hızlı geçmek istiyor. Burada uzun yaşamlı ve aynı anda çok kişinin ihtiyaç duyduğu verileri RAM’de tutmak çok iş görüyor. Redis, “az kullanılanı bırak” türü bir ayarla esnek davranmanı sağlarken, Memcached de sade yaklaşımıyla sık kullanılanları elde tutar. Hangisi kulağına hoş geliyor? “Politika seçeyim, ince ayar yapayım” diyorsan Redis; “ben basit akışı seviyorum” diyorsan Memcached kulağa daha sıcak gelir.
Senaryo 2: Sepet ve Kişiselleştirme Çıkmazı
Sepet, kullanıcının ciğerinin sesidir. Yanlış görünce, güven gider. Bu yüzden sepetle ilgili verileri kısa TTL ile tutmak, hatta gerekirse bazı parçaları hiç saklamamak daha güvenli olabilir. Redis’te bu parçaları ayrı bir önekle yönetmek, Memcached’te ise TTL’i düşük tutup kategori gibi blokları uzun tutmak genellikle sağlıklı sonuç verir. Kimi mağaza, sepetle ilgili fragmanları tamamen RAM dışına bırakıp sadece kategori ve listeleme sorgularını saklamayı tercih eder. Bu da bir yoldur.
Senaryo 3: Sakin Mağaza, Az Değişen Vitrin
Ürün değişimi nadir, menüler sabit, trafik dalgalı değil. Burada “kur ve unut” yaklaşımı iş görür. Memcached’in sade düzeni seni yormaz. TTL’leri makul seç, RAM’i ölçülü ver, bitti. Redis’le de “ileride genişletirim” diyorsan, ufak ince ayarlarla bırakıp yoluna devam edersin. Önemli olan, gereğinden fazla karmaşa yaratmamak.
TTL ve Eviction İçin Pratik Ayar Fikirleri
Katalog ve Listelemeler
Kategori ve arama sonuçları, çokça tekrarlandığı için RAM’e çok yakışır. TTL’i birkaç dakika ile on beş dakika arasında tutmak, ziyaretçiye hem taze hem hızlı bir deneyim verir. Kaç dakikada bir ürün bilgisi değişiyorsa ona göre ayarı tık küçültüp büyütürsün.
Ürün Sayfalarındaki Minik Sorgular
Ürün sayfasında “benzer ürünler”, “yeni eklenenler” gibi bloklar bazen çok küçük sorgulardır ama toplamda yük oluştururlar. Bunları kısa TTL ile önbelleğe alman, sayfa hissini fark edilir biçimde hızlandırır. Değişim ritmine göre birkaç dakika idealdir.
Sepet ve Kullanıcıya Özel Veriler
Sepeti yanlış göstermek en sevmediğimiz şey. Bu yüzden burada çok kısa TTL kullanmak ya da bazı parçaları önbellek dışı bırakmak en güvenli hareket. Önbelleğe girecekse dahi, sepet gibi özel verilerde süreyi çok kısaya çekmek huzur verir. Kampanyalarda süreyi daha da kıstığın olur.
Eviction İncelikleri
Redis kullanıyorsan, bellek dolduğunda hangi anahtarların gideceğini belirlemek elini güçlendirir. Daha az kritik grupları “kolay vazgeçilen” yapabilir, kritikleri kısa TTL ama sık yenileme ile koruyabilirsin. Memcached’de de bellek sınırın “gerçek sınır”dır; göz ucuyla izleyip gerekiyorsa RAM’i bir tık artırmak veya TTL’leri dengeli kısaltmak hızlı çözümler üretir.
İzleme, Ölçme ve Sakin Sorun Giderme
Gözün Sayılarda Olsun
Önbellek isabet oranı düştüyse, veritabanında dalgalanmalar görürsün. İstek sayısı aynıyken CPU’nun gereksiz kıpırdanması, “TTL kısa, herkes sıraya girmiş” işaretidir. TTL’leri bir tık uzatıp yenilenmeyi dağıtmak işini görür. Tam tersi, değişikliklerin siteye geç yansıması “TTL fazla uzun” demektir.
Küçük Komutlar, Büyük Rahatlık
Redis tarafında basit bilgiler almak için komut satırında “info” gibi komutlarla neler olup bittiğini yoklayabilirsin. Memcached’te de istatistikleri görmek için gene kısa komutlar yeter. Bunları rutinine katarsan, sorun çıkmadan önce ayarlama yaparsın. Yine de çok teknik derinliğe dalmadan, “hangi grup şişmiş, hangisi boş” sorusuna odaklanmak yeterli olur.
Diğer Katmanlarla Uyum
CDN, sayfa önbelleği ve PHP-FPM ayarların da sahnede. Nesne önbelleği, bu orkestranın sadece bir enstrümanı. Örneğin sunucu tarafı ayarlarına meraklıysan, WordPress için sunucu tarafı optimizasyon rehberimizde daha geniş bir çerçeve bulursun. Tüm katmanlar uyum içinde olduğunda, tek başına Redis ya da Memcached’den alacağın verim katlanır.
Küçük Notlar: Anahtar İsimleri, Önekler ve Dağınıklığı Önlemek
Önek (Prefix) Kullan: Karışıklık Çıkmasın
Aynı Redis ya da Memcached’i birden çok site kullanıyorsa, anahtarların çarpışması gibi tatsızlıklar yaşanabilir. Önek (prefix) kullanmak, bu çarpışmaları engeller. “magaza_2025_” gibi kısa, net bir önek iş görür. Çoklu ortamda bu küçük satır, saatler sürecek bir arızayı en başından çözer.
Grup Disiplini
Ürün, kategori, sepet, ayarlar… Hepsini zihninde gruplara ayır. Mümkünse eklenti ayarlarında da bu ayrımı kullan. Bu şekilde TTL ve eviction kararların netleşir. “Kritik gruplar kısa ama sık yenilensin, kritik olmayanlar uzun yaşasın” gibi bir disiplin, mağazanın tüm parçalarına “doğru kıyafet” giydirir.
Birlikte Çalıştığında Güzel: CDN, HTML Cache ve Nesne Önbelleği
Katlar Birbirine Bulaşmasın
CDN ile statik dosyaları hızlandırırsın, bazı sayfalarda HTML önbellek de kullanırsın. Nesne önbelleği ise veritabanına inmeyi azaltır. Hepsi aynı sahnede farklı rol. WooCommerce için genellikle HTML önbelleği sepet ve ödeme gibi sayfalarda dikkatlice devre dışı tutulur. Nesne önbelleği ise bu sayfalarda bile “küçük hesapları” hızlandırabilir. Doğru harmoni ile sayfalar yağıp gider.
Bu katmanların nabzını tutarken, “aynı anda hepsi aynı anahtarın peşine düşmesin” diye TTL ve kuralları dengeli dağıtmak gerekir. Panik yok; ufak denemeler ve ölçümle doğru karışımı bulursun.
Kaynaklara Bakmak İstersen
Yönünü Şaşırmamak İçin İyi Duraklar
WordPress’in nesne önbelleği mantığı resmi dokümantasyonda anlaşılır biçimde anlatılır; istersen bir göz atabilirsin: WordPress’in Nesne Önbelleği mantığına göz atmak. Redis’in bellek dolduğunda nasıl davrandığını merak ediyorsan, kısa ve faydalı bir açıklama şu sayfada: Redis’in tahliye (eviction) politikaları. Memcached tarafında ise resmi site, pratik bir özet sunuyor: Memcached’in çalışma biçimi ve sınırları. Her biri, karar verirken kafanı netleştiren ufak bir mercek gibi.
Kapanış: İki Güzel Araç, Bir Akıllı Yol Haritası
Şunu fark ettim: “Redis mi Memcached mi?” sorusunun tek cevabı yok. Mağazanın ritmi, verinin doğası, senin bakım alışkanlığın… Hepsi masanın üzerinde. İnce ayarlarla oynamayı seviyor ve anahtarların kaderini biraz sen çizmek istiyorsan Redis kulağına yakındır. Basitlik, hız ve daha az ayarla sakin yol almak istiyorsan Memcached seni yormaz. İkisi de doğru yerde şahane iş çıkarır.
Pratik bir başlangıç için şunları not et: Kategori ve listelemeler gibi paylaşılan veriler için birkaç dakikalık TTL, sepet ve kişisel verilerde çok kısa TTL veya hiç önbellek yok; kampanya dönemlerinde süreleri kısalt, yoğunluk bitince esnet. Redis’te bellek politikasını ihtiyacına göre seç; Memcached’de RAM sınırını gerçekçi tut ve isabet oranını gözle. Hepsinden önemlisi, küçük adımlarla dene ve ölç. Bu yaklaşım, seni büyük sürprizlerden korur.
Umarım bu yolculuk, mağazanı hızlandırırken içini de rahatlatır. Soruların olursa yine konuşuruz; bir sonraki yazıda belki de önbelleklemenin CDN ve HTML katmanıyla daha yaratıcı kombinasyonlarını kurcalarız. Şimdilik, kahveni tazele, TTL’leri küçükçe elden geçir ve mağazanı bir kez daha hızlıca dolaş. Ritmi duyacak, farkı hissedeceksin.
