Buyukweb
Redis Kurulumu ve Önbellekleme: Uygulama Performansını Artırın

Redis Kurulumu ve Önbellekleme: Uygulama Performansını Artırın

Redis kurulumu ve önbellekleme stratejileri. Veri yapıları, PHP/Node.js entegrasyonu, Redis Sentinel ile yüksek erişilebilirlik ve bellek yönetimi.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü11 dakika okuma

Redis Kurulumu, Önbellekleme ve Performans Rehberi (2026)

Sayfa açılışı 3 saniye, MySQL CPU %95'te — ama bakıyorsunuz veriler aslında her 5 dakikada bir değişiyor. Neden her sayfa yüklemesinde aynı sorguları çalıştırıyoruz? İşte Redis'in çözdüğü sorun tam olarak bu.

Redis (Remote Dictionary Server), verileri disk yerine bellekte tutan açık kaynaklı bir anahtar-değer deposudur. Doğru yapılandırıldığında veritabanı yükünü %70-90 oranında düşürebilir; oturum paylaşımından gerçek zamanlı mesajlaşmaya kadar onlarca farklı senaryoda görev yapabilir. Ama her şey gibi Redis de her durumda doğru araç değil. Günde 1000 ziyaretin altındaki bir site için Redis kurulum karmaşıklığı fazla; LiteSpeed LSCache zaten %95 yükü kapatıyor. Redis ihtiyacı şu durumlarda ortaya çıkıyor: yüksek dinamik veritabanı sorgusu (e-ticaret, forum, üyelik sistemi), birden fazla uygulama sunucusu arasında oturum paylaşımı ya da WebSocket kullanan Pub/Sub gerektiren uygulamalar.

Buyukweb perspektifi: cPanel hosting paketlerimizde Redis otomatik aktif değildir; PHP Redis eklentisi ve Redis sunucusu, kullanıcı izolasyonu ile birlikte destek hattımız üzerinden talep bazlı aktive edilir (0850 302 60 70). VDS paketlerinde ise Redis tamamen self-host kurulabilir — aşağıdaki apt veya dnf komutlarıyla dakikalar içinde çalışır hale gelir.

Redis Neyi Çözer — Kullanım Senaryoları

Senaryo Redis rolu Alternatif
Veritabanı sorgu cache Sık çalışan SELECT sonuçlarını bellekte tut Uygulama düzeyi PHP cache
Session yönetimi Çok sunuculu dağıtık oturum paylaşımı Dosya/DB tabanlı session
Rate limiting API istek sayacı (INCR + EXPIRE) Veritabanı sayacı (yavaş)
Sıralama tablosu Sorted Set ile anlık leaderboard JOIN'li sorgu (yavaş)
İş kuyruğu (Queue) List veri yapısıyla RPUSH/LPOP Cron + DB polling
Pub/Sub mesajlaşma WebSocket arka plan kanal yönetimi Polling
WordPress Object Cache DB sorgularını uygulama katmanında önbelleğe al Transient API (DB tabanlı)

Küçük site veya blog için bu tablonun büyük kısmı overkill. Redis kurulumu ancak üstteki senaryolardan en az biri gerçekten varsa anlamlı.

VDS'de Redis Kurulumu

Ubuntu 22.04 / Debian 12

apt update
apt install redis-server -y
systemctl enable --now redis-server
redis-cli ping
# PONG — Redis çalışıyor

Redis 7.x (LTS), Ubuntu 22.04 depolarında hazır gelir. Daha güncel sürüm için:

# Redis resmi paket deposu
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list
apt update && apt install redis -y
redis-server --version
# Redis server v=7.x.x

AlmaLinux 9 / Rocky Linux 9

dnf install redis -y
systemctl enable --now redis
redis-cli ping
# PONG

Daha güncel versiyon için:

dnf module enable redis:7 -y
dnf install redis -y

Kurulum Doğrulama

# Servis durumu
systemctl status redis

# Bağlantı testi
redis-cli -h 127.0.0.1 -p 6379 ping

# Versiyon bilgisi
redis-cli INFO server | grep redis_version

redis.conf Kritik Ayarlar

Redis'in iki yapılandırma dosyası yolu:

  • Ubuntu/Debian: /etc/redis/redis.conf
  • AlmaLinux/RHEL: /etc/redis.conf

Temel Güvenlik ve Bellek Ayarları

# Sadece yerel bağlantı kabul et (dış dünyaya açma)
bind 127.0.0.1 -::1

# Şifre koru
requirepass guclu_bir_sifre_buraya

# Maksimum bellek limiti (VDS RAM'inin %25-33'ü ideal)
maxmemory 512mb

# Bellek dolunca ne yapılsın?
# allkeys-lru: tüm anahtarlardan en az kullanılanı sil (cache için ideal)
# volatile-lru: sadece TTL olan anahtarlardan sil (karışık kullanım için)
# noeviction: hata döndür, silme (session gibi kritik veri için)
maxmemory-policy allkeys-lru

# Lazy freeing: büyük veri silme işlemi arka planda (ana thread kilitlemez)
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes

Eviction Policy Seçim Rehberi

Policy Ne zaman?
allkeys-lru Saf cache — tüm anahtarlar eşit değerde, en eskisi gitsin
volatile-lru Karışık: TTL olan cache, TTL olmayan kalıcı veri
allkeys-lfu Redis 4+, LRU yerine kullanım sıklığına göre (daha doğru ama CPU'ya biraz daha yük)
volatile-ttl En kısa ömürlüyü önce sil
noeviction Session/queue/kalıcı veri — silme, hata döndür

Persistence: RDB vs AOF

Redis in-memory çalışır ama veriyi diske yazabilir. İki yöntemi var:

RDB (Snapshot — Anlık Görüntü)

# 900 saniyede 1 değişiklik olduysa kaydet
save 900 1
save 300 10
save 60 10000

# RDB dosya adı
dbfilename dump.rdb
dir /var/lib/redis

RDB belirli aralıklarla anlık görüntü alır. Sunucu restart sonrasında son snapshot'tan geri yükler; aralarındaki veri kaybolur.

AOF (Append-Only File)

appendonly yes
appendfilename "appendonly.aof"

# fsync politikası:
# everysec: saniyede bir yaz (önerilen — performans ve güvenlik dengesi)
# always: her komutta yaz (en güvenli, en yavaş)
# no: OS'e bırak (en hızlı, en az güvenli)
appendfsync everysec

# AOF dosyası belirli büyüklüğe gelince compact et
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

AOF her yazma komutunu kayıt altına alır; restart sonrası komutlar tekrar oynatılır. RDB'ye göre daha fazla disk I/O ama veri kaybı riski neredeyse sıfır.

RDB vs AOF Kıyası

Özellik RDB AOF
Veri kaybı riski Snapshot aralığı kadar Maks 1 sn (everysec)
Restart hızı Hızlı (binary yükleme) Yavaş (komutları tekrar oynat)
Disk kullanımı Az Fazla (zamanla büyür)
İnsan okunabilirlik Hayır (binary) Evet (text log)
Kullanım Cache-only, veri kaybı önemli değil Session, queue, kritik veri

Cache kullanımında (veri kaybı önemsiz) RDB yeterli; session veya queue için AOF everysec önerilir. İkisi birlikte açılabilir — Redis önce AOF'tan yükler.

Redis Benchmark

Kurulum sonrası performansı yerleşik redis-benchmark aracıyla ölçebilirsiniz:

# 100.000 istek, 50 paralel bağlantı, pipeline 16
redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -c 50 -P 16 -q

# Sadece SET ve GET
redis-benchmark -t set,get -n 100000 -q

VDS ortamında tipik sonuç: SET 180.000+ ops/sn, GET 200.000+ ops/sn. NVMe SSD ve yerel ağ ile bu değerler çoğu uygulama için fazlasıyla yeterli.

PHP Entegrasyonu — phpredis ve Predis

İki seçenek var: phpredis (C extension, hızlı) ve Predis (pure-PHP, bağımlılık yok).

phpredis Kurulumu

# Ubuntu/Debian
apt install php-redis -y
systemctl restart php8.x-fpm   # veya apache2

# AlmaLinux
dnf install php-pecl-redis -y

phpredis ile Cache Örneği

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('sifreniz');

// Veritabanı sorgu önbellekleme
function getUrunler(PDO $pdo, Redis $redis): array {
    $cacheKey = 'urunler:liste';
    $cached   = $redis->get($cacheKey);

    if ($cached !== false) {
        return json_decode($cached, true);
    }

    $stmt = $pdo->query('SELECT * FROM urunler WHERE aktif = 1 ORDER BY sira');
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 5 dakika önbellekle (TTL = 300 sn)
    $redis->setex($cacheKey, 300, json_encode($data));
    return $data;
}

// Session örneği
$redis->setex('session:' . session_id(), 3600, json_encode($_SESSION));

Node.js Entegrasyonu — ioredis

const Redis = require('ioredis');

const redis = new Redis({
  host: '127.0.0.1',
  port: 6379,
  password: 'sifreniz',
  retryStrategy: (times) => Math.min(times * 50, 2000),
});

// Cache-aside pattern
async function getUrun(id) {
  const key    = \`urun:\${id}\`;
  const cached = await redis.get(key);
  if (cached) return JSON.parse(cached);

  const urun = await db.query('SELECT * FROM urunler WHERE id = ?', [id]);
  await redis.setex(key, 300, JSON.stringify(urun));
  return urun;
}

// Rate limiting
async function checkRateLimit(ip) {
  const key   = \`rl:\${ip}\`;
  const count = await redis.incr(key);
  if (count === 1) await redis.expire(key, 60);
  return count > 100; // dakikada 100 istek
}

WordPress Object Cache Entegrasyonu

WordPress her sayfa yüklemesinde onlarca veritabanı sorgusu atar: kullanıcı bilgisi, menüler, widget'lar, seçenekler. Redis Object Cache bu sorguların sonuçlarını bellekte tutar; ikinci istekte DB'ye gitmez.

cPanel Hosting'de Redis Object Cache

cPanel paketlerimizde Redis aktivasyonu destek hattından talep edilir. Aktif edildikten sonra:

  1. WordPress eklenti yöneticisinden Redis Object Cache eklentisini kur
  2. wp-config.php dosyasına ekle:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'redis_sifreniz');
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_CACHE', true);
  1. Eklenti panelinde Enable Object Cache tıkla — durum "Connected" olmalı.

Object Cache Pro vs Redis Object Cache

Eklenti Fiyat Avantaj
Redis Object Cache Ücretsiz Yeterli, %90 kullanım için ideal
Object Cache Pro Ücretli ($95+/yıl) WooCommerce için optimize, daha az bağlantı overhead

Küçük ve orta WordPress siteler için ücretsiz Redis Object Cache yeterli. Yüksek trafikli WooCommerce için Object Cache Pro değerlendirilebilir.

LSCache + Redis Kombinasyonu

LiteSpeed LSCache sayfa cache (tam HTML önbellekleme) yapar; Redis object cache (DB sorgu önbellekleme). İkisi çakışmaz, tamamlayıcıdır:

  • LSCache: Giriş yapmamış ziyaretçiler için HTML'i önbellekler → TTFB 50ms altına düşer
  • Redis: Giriş yapmış kullanıcılar veya dinamik içerik için DB yükünü düşürür

Bu kombinasyon cPanel hosting'deki maksimum performans senaryosudur.

Redis vs Memcached

Özellik Redis 7.x Memcached
Veri yapıları String, Hash, List, Set, Sorted Set, Stream, Bitmap, HyperLogLog Yalnızca String
Persistence RDB + AOF Hayır (memory-only)
Pub/Sub Var Yok
Cluster Redis Cluster (native) Uygulama tarafı sharding
ACL (erişim kontrolü) Redis 6+ ACL Yok
Çok iş parçacığı Tek thread (I/O çok iş parçacıklı 6+) Çok iş parçacıklı
WordPress cache Object Cache eklentileri var Hayır (WP eklenti yok)
Tercih Genel amaç, WordPress, session, queue Yalnızca basit string cache

Memcached hâlâ geçerli; sadece düz string cache ve çok yüksek paralel bağlantı gerektiğinde tercih edilebilir. Ama Redis neredeyse her zaman daha iyi seçim çünkü ek veri yapıları ve persistence ücretsiz geliyor.

Redis Cluster vs Sentinel

Redis Sentinel (Yüksek Erişilebilirlik)

Tek shard, yedekli mimari: master çökünce Sentinel otomatik slave'i master'a yükseltir. 3 Sentinel quorum (oy birliği) ile failover yönetilir. Tek VDS'ye sığan veri boyutunda yeterli; çoğu WordPress ve e-ticaret sitesi bu yapıyla rahat çalışır.

Redis Cluster (Yatay Ölçekleme)

Veri 16.384 slot'a bölünerek birden fazla shard'a dağıtılır. Yüzlerce GB veri veya saniyede yüz binlerce istek gerektiğinde devreye girer. Kurulum ve yönetim Sentinel'e göre çok daha karmaşık; gerçek büyük ölçek olmadan tercih edilmez.

Monitoring — Redis İzleme

redis-cli INFO

# Genel durum
redis-cli INFO all

# Sadece bellek
redis-cli INFO memory | grep -E 'used_memory_human|maxmemory_human|mem_fragmentation'

# Hit/miss oranı (en önemli cache metriği)
redis-cli INFO stats | grep -E 'keyspace_hits|keyspace_misses'

# Anlık komut akışı (dikkat: yoğun trafikte performans etkiler)
redis-cli MONITOR

# Yavaş komut logu
redis-cli SLOWLOG GET 10
redis-cli CONFIG SET slowlog-log-slower-than 10000  # 10ms üzeri yakala

Hit Rate Hesaplama

redis-cli INFO stats | grep -E 'keyspace_hits|keyspace_misses'

%85 üzeri hit rate iyi; %70 altı cache stratejisini gözden geçirin (TTL çok kısa veya anahtar dağılımı çok geniş olabilir).

ACL ile Kullanıcı İzolasyonu (Redis 6+)

VDS'de birden fazla uygulama aynı Redis örneğini kullanıyorsa her birine ayrı kullanıcı ve anahtar prefix izni tanımlayın:

redis-cli ACL SETUSER uygulama1 on >sifre1 ~uygulama1:* +get +set +del +expire
redis-cli ACL SETUSER uygulama2 on >sifre2 ~uygulama2:* +get +set +del +expire
redis-cli ACL LIST

uygulama1 kullanıcısı yalnızca uygulama1:* anahtarlarına erişir; diğer uygulamaların verilerini göremez, değiştiremez.

Sıkça Sorulan Sorular

Redis mi Memcached mi? Hangisini tercih etmeliyim?

WordPress Object Cache için Redis zorunlu tercih (Memcached için uyumlu WP eklentisi yok). Genel cache için Redis daha yetenekli: persistence, veri tipleri, ACL, Pub/Sub Memcached'de yok. Sadece düz string cache ve çok yüksek paralel bağlantı (C10K+) gerektiğinde Memcached hâlâ geçerli. Yeni projeler için Redis başlayın.

Redis persistence açık olmalı mı, kapalı mı?

Cache-only kullanımda (veri kaybı önemsiz) persistence kapalı olabilir — bellek daha verimli kullanılır, restart hızlanır. Session veya queue tutuyorsanız AOF everysec açın. WordPress Object Cache için persistence genellikle kapalı: site restart olunca önbellek zaten geçersiz, sıfırdan dolar.

maxmemory-policy neyi etkiler?

Redis bellek dolduğunda hangi anahtarı sileceğini belirler. Saf cache için allkeys-lru (en az kullanılan gider) önerilir. Session gibi kritik veri için noeviction ayarlayın — bellek dolunca hata döner, silme olmaz. volatile-lru ikisi karışıksa: TTL olan cache silinir, TTL olmayan kalıcı veri korunur.

Küçük sitem için Redis kurmalı mıyım?

Günde 1000 ziyaretin altındaki blog veya kurumsal site için Redis kurulumu gereksiz karmaşıklık getirir. Buyukweb cPanel paketlerindeki LiteSpeed LSCache bu trafik için %95 yükü kapatır. Redis ihtiyacı yüksek dinamik sorgu, dağıtık session veya WebSocket gerektiren durumda ortaya çıkar.

Buyukweb cPanel'de Redis nasıl aktive edilir?

cPanel paylaşımlı hosting paketlerimizde Redis otomatik aktif değildir. PHP Redis eklentisi ve Redis sunucusu kullanıcı izolasyonuyla destek hattımız üzerinden talep bazlı aktive edilir. Destek için 0850 302 60 70'i arayabilir ya da my.buyukweb.com üzerinden ticket açabilirsiniz.

Redis Cluster ne zaman gerekir?

Tek sunucuya sığmayan veri boyutu (yüzlerce GB) veya saniyede yüz binlerce istek gerektiğinde. Orta büyüklükteki uygulamalar için Sentinel yeterli: master çökünce otomatik failover sağlar, cluster karmaşıklığı olmadan. Çoğu WordPress ve e-ticaret sitesi tek Redis örneğiyle yıllarca rahat çalışır.

Redis 6+ ACL ne işe yarar?

Aynı Redis sunucusunda birden fazla uygulama izole etmenizi sağlar: her uygulamaya farklı şifre, farklı anahtar prefix erişimi ve farklı komut izinleri tanımlarsınız. VDS'de tek Redis örneğiyle birden fazla proje çalıştırmanın güvenli yolu.

Redis'te veri sızıntısı riski var mı?

Varsayılan kurulumda Redis şifresiz ve tüm ağ arayüzlerine açık gelir. bind 127.0.0.1 ve requirepass mutlaka ayarlayın. Dışarıdan erişim gerekiyorsa TLS (Redis 6+) veya SSH tüneli kullanın. ACL ile uygulama bazlı izin kısıtlaması ekleyin.


İlgili Büyükweb Hizmetleri

Redis self-host için Türkiye lokasyonlu, root erişimli VDS sunucu paketlerimiz:

Teknik destek ve Redis aktivasyonu için: 0850 302 60 70 veya iletişim sayfamız.

Veritabanı Yönetimi İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#redis#performans optimizasyonu#kurulum rehberi#veritabanı#database#veri yönetimi

Bu yazıyı paylaş