1. Anasayfa
  2. Performans

Redis ve Memcached ile Veritabanı Yükünü Azaltın

Redis ve Memcached ile Veritabanı Yükünü Azaltın
0

Öne Çıkanlar

  • Redis ve Memcached, dinamik sitelerde veritabanı sorgularını azaltarak yanıt sürelerini ve sunucu yükünü ciddi oranda düşürür.
  • Doğru kaynak yönetimi (maxmemory / -m) ve sınırlandırma yapılmazsa RAM sorunları ve swap nedeniyle performans düşebilir.
  • Güvenlik için servisleri yalnızca localhost (127.0.0.1) üzerinden erişilebilir kılmak ve firewall kuralları uygulamak kritiktir.
  • Önce sorgu optimizasyonu ve uygulama tarafı iyileştirmeleri; sonra cache ve donanım yükseltmesi en etkili fiyat/performans stratejisidir.

Giriş

Redis ve Memcached: Veritabanını Rahatlatın derken abartmıyoruz; doğru kurduğunuzda gerçekten veritabanının omzundan koca bir yük alıyorsunuz. Özellikle WordPress, Laravel, OpenCart gibi dinamik sitelerde her sayfa isteğinde aynı SQL sorgularının tekrar tekrar çalıştığını düşünün. Sonra şu klasik cümle geliyor: “Trafik çok artmadı ama site neden bu kadar yavaşladı?” İşte burada nesne önbellekleme devreye giriyor. Redis ve Memcached, RAM’i akıllıca kullanarak veriyi diske inmeden, veritabanına uğramadan sunuyor. Root yetkisi olan için de, paylaşımlı hosting kullanan için de oyun değiştirici bir katman bu.

Özellik Değer
Hizmet Türü Hosting / VDS / Cloud
Hedef Kitle Geliştirici, Ajans, Orta Trafikli Site Sahipleri
Zorluk Seviyesi Orta
Öne Çıkan Özellik Hız ve Veritabanı Yükünü Azaltma

Redis ve Memcached: Veritabanını Rahatlatın Hakkında Bilmeniz Gerekenler

Şöyle düşünün: Her kullanıcı siteye girdiğinde veritabanına “Aynı soruyu” soruyorsunuz. “Bu ürünün fiyatı ne?”, “Bu yazının kategorisi ne?”, “Bu kullanıcı login mi?” gibi. Veritabanı bir süre sonra telefon santrali gibi çalmaya başlıyor. Redis ve Memcached tam burada devreye girip, “Bu cevabı zaten biliyorum, RAM’de tutuyorum, veritabanına sorma, ben söyleyeyim” diyor.

Aslında durum tam olarak şöyle: Redis ve Memcached birer veritabanı değil, bellek içi (in-memory) anahtar–değer depoları. Yani disk yerine RAM kullanıyorlar, bu yüzden ışık hızında cevap veriyorlar. Dinamik sitelerde sayfa oluşturmak için kullanılan objeleri (sorgu sonuçları, session bilgileri, cache’lenmiş HTML blokları) RAM’de tutarak hem yanıt süresini azaltıyor hem de veritabanı sunucusunun CPU ve I/O yükünü ciddi şekilde düşürüyor.

Burada sık duyduğum bir efsane var: “Sunucuya biraz daha CPU çekirdeği ekleyelim, site hızlanır.” Hayır, her zaman değil. Dürüst olmak gerekirse çoğu senaryoda, doğru yapılandırılmış Redis/Memcached ve düzgün HTTP/PHP cache katmanı, ekstra 2 çekirdekten daha fazla fark ettiriyor. Veritabanını rahatlatmadan çekirdek eklemek, tıkalı egzozlu arabaya turbo takmaya benziyor; potansiyel var ama boğuluyor.

Kaynak Yönetimi – Limitleri Zorlamayın

Redis ve Memcached sizi hızlandırırken, yanlış yapılandırılırsa RAM canavarına da dönüşebilir. İşin püf noktası şurada: RAM’i cömertçe ama kontrollü kullandırmak. 2 GB RAM’li bir VDS’de Redis’e 1.5 GB ayırırsanız, sistem swap’e düşer, her şey yavaşlar, sonra da “Redis açtım, site daha da kötü oldu” dersiniz.

Genelde şu mantığı öneriyorum: Toplam RAM’inizden işletim sistemi, web sunucusu (Apache/Nginx/OpenLiteSpeed), PHP-FPM ve veritabanı için makul bir pay bırakın, kalanın yarısını geçmeyecek şekilde Redis/Memcached için ayarlayın. Örneğin 4 GB RAM’de Redis için 512–1024 MB çoğu site için gayet yeterli.

“Aşırı kaynak kullanımı” uyarısı aldığınızda, panik yapmadan önce bakmanız gereken ilk yer top veya htop değil; genelde log dosyaları ve servis konfigleri. Uygulama seviyesinde de çoğu zaman Redis ile ilişkili sorunlarda:

  • Redis için: /etc/redis/redis.conf veya /etc/redis.conf
  • Memcached için: Servisi başlatırken kullanılan parametreler (-m ile RAM limiti gibi)

Bu dosyalarda maxmemory (Redis) veya -m (Memcached) ayarlarını kontrol etmek, aşırı RAM kullanımında atılacak ilk adım olmalı. Tıpkı bir araba motoru gibi, sunucular da yüksek trafikte doğru soğutmaya (kaynak yönetimine) ihtiyaç duyar.

Güvenlik Duvarı ve Port Ayarları

“Dış dünyaya açık her port, açık bir penceredir.” Redis ve Memcached tarafında bu cümle daha da kritik, çünkü çoğu üretim ortamında bu servislerin yalnızca localhost’tan (127.0.0.1) erişilebilir olması gerekir. Yani dışarıya port açmanın hiçbir mantığı yok; uygulamanız zaten aynı sunucudan bağlanacak.

Redis varsayılan olarak 6379 portunda çalışır, Memcached ise genelde 11211. İkisini de doğrudan internete açarsanız, basit bir şifre zafiyetinde bile tüm oturum verilerinize, cache’lerinize erişim imkanı verirsiniz. O yüzden:

  • Konfig dosyasında bind 127.0.0.1 satırının olduğundan emin olun.
  • Firewall (csf, ufw veya raw iptables) üzerinden bu portlara sadece gerekli ise erişim izni verin.
  • SSH için standart 22 portunu değiştirin, gerekirse AllowUsers ile sınırlayın.
  • FTP mümkünse kapatın, yerine SFTP veya FTPS kullanın.

İşin pratiği şöyle: Redis’i internetten erişilen bir servis gibi değil, sistem içi performans modülü gibi düşünün. Dışarıya servis veren o değil, uygulamanız.

Yazılım Uyumluluğu ve PHP/Veritabanı Seçimi

“Her zaman en güncel sürüm en iyisidir” lafı, güvenlik yamaları için doğru olabilir ama üretim sistemlerinde her zaman tam karşılığını bulmuyor. Redis ve Memcached kullanırken iki şeye bakmak gerekiyor: PHP uzantıları ve framework/CMS uyumluluğu.

  • WordPress kullanıyorsanız, Redis Object Cache gibi eklentilerin desteklediği sürümlere bakın.
  • PHP tarafında php-redis veya php-memcached modüllerinin uyumlu versiyonda olduğundan emin olun.

Veritabanı tarafında ise “altın kural” şu: Önce sorguyu düzelt, sonra donanımı suçla. 50 join’li, indexsiz bir sorguyu Redis bile kurtaramaz. Redis ve Memcached sadece iyi tasarlanmış sorguların sonuçlarını hızla sunar, kötü tasarımı düzeltmez. Yani önce index, sonra cache.

Bu arada, performansınızı artırmak için Performans sayfamızdaki diğer çözümlere de bakabilirsiniz. Redis/Memcached sadece bu mimarinin bir parçası.

Uygulama: Kurulum ve Yayına Alma

Terminali açın, şu komutu girin demiyorum ama kafanızda net bir akış olsun istiyorum. Mantık şu:

  1. Bağımlılıkları kontrol edin: Sunucunuzda PHP, veritabanı (MySQL/MariaDB) ve web sunucusu zaten çalışıyor mu? Yönetimli bir web hosting veya WordPress hosting kullanıyorsanız, çoğu bileşen hazır gelir.
  2. Redis/Memcached servisini kurun: VDS veya Cloud sunucu kullanıyorsanız paket yöneticisiyle (apt, yum) kurarsınız, paylaşımlı hostingde ise genelde panel üzerinden aç/kapa mantığıyla yönetirsiniz.
  3. Konfig dosyasını düzenleyin: Redis için bind, maxmemory ve maxmemory-policy satırları kritik. Memcached için de RAM limiti, bağlantı sayısı gibi parametreler önemli.
  4. Uygulamayı bağlayın: WordPress’te Redis Object Cache eklentisi, Laravel’de cache driver’ını redis/memcached yapmak, kendi uygulamanızda da ilgili client kütüphaneyi kullanmak gerekiyor.
  5. Test edin: Sayfa öncesi/sonrası açılış süreleri, veritabanı sorgu sayısı ve CPU/RAM kullanımını kıyaslayın. Genelde 5 dakikadan fazla sürmez; doğru yaptığınızda fark gözle görülür.

Özetle: Sunucunuza Redis/Memcached eklemek, var olan veritabanınızı “upgrade” etmiyor; araya akıllı bir tampon katman ekliyor. Bu da hem son kullanıcı deneyimini hem de sunucunun nefes alışını değiştiriyor.

Sık Karşılaşılan Sorunlar ve Pratik Çözümler

Sorun Muhtemel Neden Çözüm
Site Yavaş Açılıyor Zayıf önbellekleme veya yüksek sorgu sayısı Redis/Litespeed Cache kurulumu yapın
Bağlantı Zaman Aşımı Firewall engeli veya hatalı DNS Port izinlerini kontrol edin

Redis ve Memcached özelinde, sık gördüğüm birkaç senaryoyu da ekleyeyim:

  • “Redis çalışıyor ama cache dolmuyor” → Uygulama tarafında driver yanlış seçilmiş veya eklenti aktif değil. Örneğin WordPress’te object-cache.php dosyası oluşmamış olabiliyor.
  • “RAM sürekli doluyor”maxmemory limiti yok veya allkeys-lru gibi bir politikayla eski anahtarları temizleyecek yapılandırma yapılmamış.
  • “CPU bir anda fırlıyor” → Tek bir yoğun sorgu sonucu devasa bir veri seti cache’leniyor, her istekte bu veri RAM’den çekilip tekrar işleniyor. Cache’i daha küçük, anlamlı parçalara bölmek gerekiyor.

Sıkça Sorulan Sorular

Redis ve Memcached kullanmak güvenli mi?

Doğru yapılandırıldığında evet, gayet güvenli. Asıl risk, servisleri internetten erişilebilir bırakmak veya şifre koymamak. bind 127.0.0.1, güçlü bir firewall ve gerekiyorsa Redis için requirepass kullanımına dikkat ettiğiniz sürece, verinizin riskini minimuma indirirsiniz. Ek olarak HTTPS tarafında da sitenizi SSL sertifikası ile korumayı unutmayın; uygulama–kullanıcı trafiği şifreli olmalı.

Fiyat/Performans dengesini nasıl kurarım?

Burada strateji şu: Önce yazılım tarafını (cache, sorgu optimizasyonu, PHP versiyonu) maksimum verimli hale getirin, sonra donanımı büyütün. Yani direkt daha pahalı VDS’e atlamak yerine, mevcut VDS üzerinde Redis ve uygun bir HTTP cache (ör. LiteSpeed Cache) kurmak genelde daha iyi bir fiyat/performans dengesi sunar. Trafiğiniz büyüdüğünde ise paylaşımlı hosting’den VDS veya cloud sunucu mimarisine geçmek mantıklı olur.

Taşıma (Migration) işlemi zor mu?

“Cache kurdum, şimdi sunucu değiştirmek istiyorum, her şey patlar mı?” sorusu çok geliyor. Aslında Redis ve Memcached yapınız doğru kurgulandıysa, taşıma o kadar da dramatik değil. Genelde şu şekilde ilerliyoruz:

  • Önce dosyalar ve veritabanı taşınıyor.
  • Yeni sunucuda Redis/Memcached servisleri kurulup eski ayarlar aktarılıyor.
  • DNS yönlendirmesi yapılıp son kontroller sonrası eski sunucu kapatılıyor.

Cache içeriği zaten yeniden oluşturulabilir verilerden oluştuğu için, “cache’i taşımak” şart değil. Bilhost tarafında taşıma sürecini çoğu zaman yönetimli şekilde üstleniyoruz; özellikle web hosting veya WordPress hosting kullananlar için bu süreç oldukça konforlu geçiyor.

Sonuç

İşin özü şu: Redis ve Memcached ilk bakışta karmaşık görünebilir ama mantık net. Sık ihtiyaç duyulan veriyi RAM’e alıp, veritabanını sürekli aynı işleri yapmaktan kurtarıyorsunuz. Dinamik sitelerde bu, hem kullanıcı deneyiminde hem de sunucu sağlığında hissedilir bir rahatlama getiriyor. Tıpkı doğru yağla çalışan bir motor gibi, sistem daha serin, daha stabil ve daha hızlı çalışıyor.

Eğer siteniz yavaşladıysa, veritabanı sorgu sayınız arttıysa veya “CPU yine %100’e vurdu” ekranını sık görüyorsanız, Redis ve Memcached: Veritabanını Rahatlatın yaklaşımını ciddi ciddi düşünme zamanı gelmiştir. Doğru yapılandırma hayat kurtarır. Eğer bir yerde takılırsanız biz buradayız, yorumlarda sorularınızı bekliyorum.

İlginizi Çekebilir

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