Modern web uygulamalarında ve WordPress/WooCommerce gibi içerik yönetim sistemlerinde en maliyetli işlem diskten ve ilişkisel veritabanından (MySQL/PostgreSQL) veri okumaktır. Bir ziyaretçi bir sayfayı açtığında çalışan SQL sorgularının (menüler, site ayarları, kategori listeleri, kullanıcı oturumları) büyük bir kısmı her istekte değişmeyen statik veya yarı-statik verilerden oluşur.
İşte bu noktada RAM tabanlı anahtar-değer (Key-Value) önbellekleme sistemleri devreye girer. Disk erişimi mikrosaniyeler veya milisaniyeler sürerken, RAM'deki veriye erişim nanosaniyeler seviyesindedir. Doğru yapılandırılmış bir Object Cache katmanı, veritabanı sorgu sayısını %70 ile %95 oranında azaltarak sayfa üretim süresini (Time to First Byte - TTFB) dramatik şekilde düşürür.
Bu rehberde; web hosting dünyasında en çok kullanılan Redis, Memcached ve Redis'in lisans değişikliği sonrası doğan Linux Foundation projesi Valkey arasındaki mimari farkları, WordPress entegrasyonunu ve Linux çekirdek seviyesindeki optimizasyonları inceliyoruz.
1. Mimari Karşılaştırma: Redis vs Memcached vs Valkey
Her üç sistem de veriyi bellekte (RAM) saklar; ancak dahili veri yapıları, işlemci mimarileri ve kullanım amaçları bakımından birbirlerinden ayrılırlar:
| Özellik | Memcached | Redis | Valkey (Redis Açık Kaynak Çatalı) |
|---|---|---|---|
| İşlem Modeli | Çok İş Parçacıklı (Multi-threaded) | Tek İş Parçacıklı Event Loop (I/O thread'li) | Yüksek Performanslı Çoklu Thread I/O |
| Açık Kaynak Lisansı | BSD (Tamamen Açık Kaynak) | SSPLv1 / RSALv2 (Ticari Kısıtlamalı) | BSD-3-Clause (Linux Foundation Güvencesi) |
| Desteklenen Veri Türleri | Yalnızca String / Düz Metin | Strings, Hashes, Lists, Sets, ZSets, Streams | Redis ile %100 Uyumlu (Drop-in Replacement) |
| Kalıcılık (Persistence) | Yok (Yalnızca Bellek İçi / Volatile) | RDB Snapshot + AOF (İsteğe Bağlı) | RDB + AOF + İyileştirilmiş Slot Yönetimi |
| Replikasyon & Kümeleme | İstemci Taraflı Sharding | Dahili Redis Cluster & Sentinel | Dahili Cluster & Optimize Edilmiş Gossip Protokolü |
| Bellek Yönetimi | Slab Allocator (Önceden Tahsisli) | Jemalloc / Glibc Malloc | Optimize Jemalloc + Düşük Fragmentasyon |
| Tipik Kullanım Alanı | Çok basit key-value önbellek, oturumlar | WordPress Object Cache, Celery kuyrukları, Pub/Sub | Tüm modern Redis iş yükleri (Lisans güvenliğiyle) |
[!NOTE] Valkey Nedir? Neden Doğdu?
Mart 2024'te Redis Ltd., Redis 7.4'ten itibaren açık kaynaklı BSD lisansını terk ederek kaynak kodunu kısıtlayıcı SSPLv1 ve RSALv2 lisanslarına geçireceğini duyurdu. Bunun üzerine Linux Foundation, aralarında Amazon Web Services (AWS), Google Cloud, Oracle, Ericsson ve SUSE'nin bulunduğu teknoloji devleriyle birlikte Redis 7.2.4 tabanlı bağımsız, tamamen açık kaynaklı Valkey projesini başlattı. Valkey, Redis komutlarıyla ve istemci kütüphaneleriyle birebir uyumludur.
2. Hangi Senaryoda Hangisi Tercih Edilmeli?
Memcached Tercih Edilmesi Gereken Durumlar
- Basit Key-Value İhtiyacı: Yalnızca HTML blokları, render edilmiş API JSON yanıtları veya PHP oturum verisi (sessions) saklanacaksa.
- Çok Çekirdekli Yüksek Concurrency: Memcached çok iş parçacıklı (multi-threaded) çalıştığı için tek bir sunucuda 32 veya 64 CPU çekirdeğinin tamamını verimli şekilde kullanarak saniyede milyonlarca basit GET/SET işlemini sıfır thread kilitlenmesiyle karşılayabilir.
- Sıfır Kalıcılık: Sunucu yeniden başladığında önbelleğin tamamen silinmesi sistem için bir sorun teşkil etmiyorsa.
Redis veya Valkey Tercih Edilmesi Gereken Durumlar
- WordPress ve Dinamik CMS'ler: WordPress
WP_Object_Cacheyapısı, etiketler ve gruplar (cache groups) üzerinde karmaşık işlemler gerektirir. Redis'in Hashes ve Set veri yapıları bu işlemler için optimize edilmiştir. - Kuyruk Yönetimi ve Background Jobs: Laravel Horizon, Celery veya BullMQ gibi arka plan iş kuyrukları
BLPOP,BRPOPvePub/Subkomutlarına bağımlıdır; bu özellikler Memcached'de bulunmaz. - WooCommerce Sepetleri ve Oturum Kalıcılığı: Sunucu güncellendiğinde veya yeniden başladığında kullanıcı sepetlerinin kaybolmaması için diske periyodik yazma (RDB Snapshotting) gereklidir.
3. WordPress & WooCommerce için Redis / Valkey Entegrasyonu
WordPress sitelerinde Object Cache kurulumu için en kararlı yöntem Unix Domain Socket bağlantısıdır:
Unix Socket vs TCP Port Karşılaştırması
Eğer veritabanı ve Redis aynı sunucu üzerinde (localhost) çalışıyorsa, TCP soketi (127.0.0.1:6379) yerine Unix Socket (/var/run/redis/redis-server.sock) tercih edilmelidir:
- TCP Soketi: Ağ protokol katmanı (TCP handshakes, checksum, buffer kopyalama) devreye girer. İstek başına ortalama gecikme 0.2 - 0.5 ms arasındadır.
- Unix Domain Socket: Doğrudan çekirdek içi bellek kopyalaması (zero-copy buffer) kullanılır. Gecikme 0.05 ms seviyesine düşer ve CPU tüketimi %20-30 oranında azalır.
redis.conf veya valkey.conf Yapılandırması:
# Unix Socket ayarları
unixsocket /var/run/redis/redis-server.sock
unixsocketperm 770
# Maksimum RAM sınırı (Sunucu RAM'ine göre örneğin 1 GB)
maxmemory 1024mb
# Bellek dolduğunda en az kullanılan anahtarları temizle
maxmemory-policy allkeys-lru
# TCP portunu dinlemeye devam etmek istenirse
bind 127.0.0.1 ::1
port 6379
protected-mode yes
wp-config.php İçerisine Eklenecek Tanımlar:
// Object Cache Unix Socket Yapılandırması
define('WP_REDIS_SCHEME', 'unix');
define('WP_REDIS_PATH', '/var/run/redis/redis-server.sock');
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
// Çoklu siteler aynı sunucudaysa anahtar çakışmasını önleyen prefix
define('WP_CACHE_KEY_SALT', 'site_bir_prod_');
// WooCommerce Geçici Verilerini (Transients) ve Oturumlarını Koruma
define('WP_REDIS_IGNORED_GROUPS', [
'counts',
'plugins',
'themes',
]);
[!TIP] LiteSpeed Web Server Kullanıcıları:
LiteSpeed Cache (LSCache) eklentisi ayarlarında Object Cache bölümünde Bağlantı Türü olarak Unix Socket, Socket Yolu olarak/var/run/redis/redis-server.sockveya paylaşımlı hostingde/home/kullaniciadi/.redis/redis.socktanımlandığında TTFB değeri paylaşımlı veritabanlarında dahi 100 ms altına inebilmektedir.
4. Linux Çekirdek (Kernel) & Sunucu Optimizasyonu
Redis veya Valkey yüksek yük altında çalışırken Linux çekirdeğinin varsayılan bellek yönetim kuralları performans darboğazlarına yol açabilir. Sunucunuzda root yetkisiyle aşağıdaki sistem parametrelerini düzenlemelisiniz:
1. vm.overcommit_memory = 1
Redis arka planda diske veri kaydederken (RDB Snapshot veya AOF rewrite) fork() sistem çağrısını kullanır. Linux çekirdeği varsayılan olarak (overcommit = 0) serbest RAM miktarının işlem boyutundan küçük olduğunu varsayarsa fork işlemini reddeder ve Redis loglarında şu uyarı belirir:
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
Çözüm için /etc/sysctl.conf dosyasına ekleyin:
vm.overcommit_memory = 1
sysctl -p
2. Transparent Huge Pages (THP) Kapatılması
Linux çekirdeğindeki Transparent Huge Pages mekanizması, 4 KB'lık standart bellek sayfaları yerine 2 MB'lık dev sayfalar tahsis eder. Ancak Redis gibi yüksek sıklıkta küçük veri değiştiren bellek içi veritabanlarında, Copy-on-Write (CoW) gecikmelerini ve bellek şişmesini (fragmentation) 10 kata kadar artırır.
Kapatmak için /etc/rc.local veya bir systemd servisiyle boot esnasında çalıştırın:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
3. TCP Dinleme Kuyruğu (net.core.somaxconn)
Yüksek anlık trafik aldığınızda gelen bağlantı isteklerinin reddedilmemesi için dinleme kuyruk limitini artırın:
# /etc/sysctl.conf
net.core.somaxconn = 65535
5. Bellek Tahliye Politikaları: maxmemory-policy Hangisi Olmalı?
Önbellek sunucunuzun RAM boyutu dolduğunda yeni anahtarların nasıl kabul edileceği maxmemory-policy direktifiyle belirlenir:
allkeys-lru(Önerilen - Object Cache İçin En İdeal): RAM dolduğunda son zamanlarda en az kullanılan (Least Recently Used) anahtarları bellekten siler. Web sitenizde trafiği düşen sayfaların verileri otomatik olarak tahliye edilirken popüler veriler bellekte kalır.volatile-lru: Yalnızca son kullanma tarihi (TTL / Expiration) tanımlanmış anahtarlar arasından en az kullanılanları siler. Eğer süresi dolmayan kritik anahtarlarınız varsa ve bunların silinmesini istemiyorsanız uygundur.noeviction(Tehlikeli): RAM dolduğunda hiçbir anahtarı silmez ve yeni yazma isteklerine hata (OOM command not allowed) döner. Yalnızca salt veritabanı olarak kullanıldığında seçilmelidir; web önbelleklemede kesinlikle seçilmemelidir.
6. Güvenlik: Dış Ağa Açık Redis Felaketini Önleme
Redis ve Valkey, kapalı ve güvenli bir yerel ağda çalışacağı varsayımıyla tasarlanmıştır. Güvenlik duvarı konfigürasyonu yapılmamış bir önbellek sunucusu dakikalar içinde botlar tarafından taranarak ele geçirilebilir.
- Asla
bind 0.0.0.0Yapmayın:
Redis'i tüm internete açmak en yaygın güvenlik açığıdır. Yalnızcabind 127.0.0.1veya sunucular arası özel yerel IP (10.0.0.x) kullanılmalıdır. - UFW Güvenlik Duvarı ile 6379 Portunu Kapatın:
# Dışarıdan gelen 6379 portu trafiğini engelleyin sudo ufw deny 6379/tcp - Parola Koruması (
requirepass): Yerel ağda dahi olsa güçlü ve rastgele oluşturulmuş bir parola belirleyin:requirepass UzunVeKarmasikParola123!*? - Tehlikeli Komutları Yeniden İsimlendirin veya Kapatın:
Kötü niyetli kullanıcıların sunucudaki konfigürasyonu değiştirmesini veya verileri silmesini engellemek için
redis.confiçinde:rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command CONFIG "SUPER_SECRET_CONFIG"
7. Sonuç ve Özet Öneriler
- Küçük ve orta ölçekli WordPress siteleri, paylaşımlı VDS üzerinde Unix Socket tabanlı Valkey veya Redis kullanarak CPU ve bellek yüklerini yarı yarıya indirebilir.
- AWS, Google Cloud veya kurumsal ortamlarda yeni lisans kısıtlamalarına ve maliyet artışlarına takılmamak adına Valkey altyapısına geçiş yapılmalıdır.
- Sadece oturum saklama ve basit string önbellekleme yapıyorsanız, çok çekirdekli bare-metal sunucularda Memcached hala en yalın ve ölçeklenebilir seçenektir.
- Donanım seçimi yaparken DDR5 ECC RAM ve PCIe 4.0 NVMe SSD barındıran sunucular, önbellek persistence (RDB/AOF) işlemlerinde disk darboğazını tamamen ortadan kaldırır.