
Redis Kurulumu ve Web Uygulaması Önbellekleme Rehberi
Redis nasıl kurulur ve web uygulamalarında nasıl kullanılır? WordPress oturum önbelleği, PHP Redis entegrasyonu, Node.js Redis kullanımı ve Redis güvenlik rehberi.
Redis Kurulumu ve Web Uygulaması Önbellekleme Rehberi
Redis (Remote Dictionary Server), in-memory veri yapısı deposudur. Önbellekleme, oturum yönetimi, gerçek zamanlı istatistikler ve kuyruklama için kullanılan Redis, web uygulamalarının performansını dramatik biçimde artırır. Bu rehberde Redis kurulumunu ve yaygın kullanım senaryolarını ele alıyoruz.
Redis Neden Kullanılır?
- Hız: Tüm veriler RAM'de tutulur, mikrosaniye düzeyinde yanıt süresi
- Veri yapıları: String, Hash, List, Set, Sorted Set gibi zengin veri tipleri
- Kalıcılık: Opsiyonel disk yazımı ile veri korunabilir
- Pub/Sub: Mesajlaşma sistemi
- Session yönetimi: Çok sunuculu ortamlarda oturum paylaşımı
Performans Karşılaştırması:
- MySQL sorgusu: 1-10ms
- Redis okuma: 0.1-1ms
- 10-100x daha hızlı
Redis Kurulumu
Ubuntu / Debian
apt update
apt install redis-server
# Yapılandırma
nano /etc/redis/redis.conf
# Servisi başlat
systemctl enable --now redis-server
AlmaLinux / CentOS
dnf install redis
systemctl enable --now redis
# Yapılandırma
nano /etc/redis/redis.conf
Sürüm Kontrolü
redis-cli --version
redis-server --version
Redis Temel Yapılandırma
/etc/redis/redis.conf:
# Sadece localhost dinle (güvenlik)
bind 127.0.0.1
# Şifre koru
requirepass guclu_redis_sifresi
# Maksimum bellek
maxmemory 256mb
# Bellek dolduğunda ne yap?
maxmemory-policy allkeys-lru # En az kullanılanı çıkar
# Kalıcılık (opsiyonel)
# 900 saniyede 1 değişiklik
save 900 1
save 300 10
save 60 10000
Değişiklik sonrası:
systemctl restart redis-server
Redis CLI Kullanımı
# Redis'e bağlan
redis-cli
# Şifre ile bağlan
redis-cli -a redis_sifresi
# Bağlantı testi
redis-cli ping # PONG dönmeli
Temel Redis Komutları
# String işlemleri
SET anahtar deger
GET anahtar
DEL anahtar
TTL anahtar # Kalan süre (saniye)
EXPIRE anahtar 3600 # 1 saat sonra sil
# Hash işlemleri
HSET kullanici:1 isim "Ahmet" yas 25
HGET kullanici:1 isim
HGETALL kullanici:1
# Liste işlemleri
RPUSH gorev "Görev 1"
RPUSH gorev "Görev 2"
LRANGE gorev 0 -1 # Tüm liste
# Set işlemleri
SADD etiketler "redis" "php" "web"
SMEMBERS etiketler
# Tüm anahtarlar
KEYS *
KEYS kullanici:* # Pattern ile
# İstatistik
INFO
INFO memory
INFO stats
WordPress için Redis Object Cache
WordPress, her sayfa yüklemesinde onlarca veritabanı sorgusu çalıştırır. Redis Object Cache bu sorguları önbelleğe alır.
Redis Object Cache Kurulumu
- WordPress'te Redis Object Cache eklentisini kurun
- wp-config.php'ye ekleyin:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_PASSWORD', 'redis_sifresi');
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_REDIS_DATABASE', 0);
- Eklenti ayarlarından Enable Object Cache butonuna tıklayın
Performans Etkisi
Redis Object Cache ile:
- Veritabanı sorgu sayısı: 50 → 2-5'e düşer
- Sayfa yükleme süresi: %30-60 iyileşme
- Sunucu CPU kullanımı: %20-40 azalma
PHP ile Redis Kullanımı
PHP Redis Eklentisi Kurulumu
# Ubuntu
apt install php-redis
# CentOS/AlmaLinux
dnf install php-pecl-redis
# PHP'yi yeniden başlat
systemctl restart php-fpm
PHP Redis Örneği
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('redis_sifresi');
// Önbellekleme örneği
$cache_key = 'urunler_listesi';
$cached = $redis->get($cache_key);
if ($cached) {
$urunler = json_decode($cached, true);
echo "Önbellekten geldi";
} else {
// Veritabanından al
$urunler = $db->query("SELECT * FROM urunler LIMIT 10");
$redis->setex($cache_key, 3600, json_encode($urunler));
echo "Veritabanından geldi";
}
Node.js ile Redis Kullanımı
npm install ioredis
const Redis = require('ioredis');
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: 'redis_sifresi',
});
// Temel kullanım
await redis.set('anahtar', 'deger', 'EX', 3600);
const deger = await redis.get('anahtar');
// Next.js API'de önbellekleme
export default async function handler(req, res) {
const cacheKey = 'products';
const cached = await redis.get(cacheKey);
if (cached) {
return res.json(JSON.parse(cached));
}
const products = await db.product.findMany();
await redis.set(cacheKey, JSON.stringify(products), 'EX', 300);
res.json(products);
}
Redis Persistence: RDB ve AOF
Redis bir bellek-içi (in-memory) veri deposudur, ancak kalıcılık (persistence) için iki mekanizma sunar:
RDB (Redis Database) — Snapshot
Belirli aralıklarla tüm veriyi tek dosyaya (dump.rdb) yazar. Disk I/O az, restore hızlıdır ama snapshot'lar arasında veri kaybı riski vardır.
# /etc/redis/redis.conf
save 3600 1 # 3600 sn içinde 1+ değişiklik varsa snapshot
save 300 100 # 300 sn içinde 100+ değişiklik
save 60 10000 # 60 sn içinde 10K+ değişiklik
dbfilename dump.rdb
dir /var/lib/redis
AOF (Append Only File)
Her yazma komutunu log dosyasına ekler. Kayıp riski neredeyse sıfırdır ama dosya büyür ve restore yavaştır.
appendonly yes
appendfsync everysec # Her saniye disk'e yaz (en pratik denge)
# appendfsync always # Her komut sonrası fsync — en güvenli, en yavaş
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
Ne Zaman Hangisi?
- Cache (sadece önbellek): Persistence kapatın (
save ""veappendonly no) — restart sonrası boş başlasın - Session store, queue, rate limiter: AOF
everysecideal denge - Master DB olarak Redis (nadir): AOF + günlük RDB backup birlikte
Backup Stratejisi
# RDB snapshot kopyala (canlı yedek)
cp /var/lib/redis/dump.rdb /backup/redis-$(date +%Y%m%d).rdb
# AOF rewrite tetikle (dosyayı küçült)
redis-cli BGREWRITEAOF
# Restore: redis durdurulur, dosya kopyalanır, başlatılır
systemctl stop redis
cp /backup/redis-20260507.rdb /var/lib/redis/dump.rdb
chown redis:redis /var/lib/redis/dump.rdb
systemctl start redis
maxmemory ve Eviction Policy
Redis'in RAM'i sınırsız değildir. Cache senaryolarında maxmemory ve uygun eviction policy kritik:
maxmemory 4gb
maxmemory-policy allkeys-lru
| Policy | Davranış | Kullanım |
|---|---|---|
| noeviction | Bellek dolunca yazma reddedilir | Veri kaybı kabul edilemez |
| allkeys-lru | En az kullanılan anahtar silinir | Genel cache (en yaygın) |
| allkeys-lfu | En az sıklıkta kullanılan silinir | Frekans bazlı cache |
| volatile-lru | Sadece TTL'i olan anahtarlardan LRU | TTL ayarlamış key'ler |
| allkeys-random | Rastgele silinir | Çok özel senaryo |
| volatile-ttl | TTL'i en yakın olan silinir | Otomatik temizlik |
maxmemory-samples 5 LRU/LFU yaklaşıklık kalıtesini ayarlar (5-10 yeterlidir).
Anahtar TTL Stratejisi
# Sonsuz cache (yanlış!) — bellek dolar
SET urunler '{...}'
# Doğru: her cache için TTL ver
SETEX urunler 3600 '{...}' # 1 saat
SET sepet:user:42 '{...}' EX 1800 # 30 dk
Redis Güvenliği
# Şifre zorunlu
requirepass guclu_sifre_128bit
# Tehlikeli komutları devre dışı bırak
rename-command FLUSHALL ""
rename-command DEBUG ""
rename-command CONFIG "gizli_config_komutu"
# Sadece localhost
bind 127.0.0.1
# Protected mode
protected-mode yes
Redis Monitoring
# Anlık istatistik
redis-cli INFO
# Bellek kullanımı
redis-cli INFO memory | grep used_memory_human
# Komutları izle (debug)
redis-cli MONITOR
# Anahtar sayısı
redis-cli DBSIZE
# En yoğun kullanılan komutlar
redis-cli INFO commandstats
Büyükweb Hosting'de Redis
[Büyükweb VDS sunucular](MASK46) üzerine Redis kurularak WordPress Object Cache ve uygulama önbellekleme için kullanılabilir. Yüksek trafikli siteler için Redis, veritabanı yükünü dramatik biçimde azaltır.
Sonuç
Redis, web uygulamalarının performansını ve ölçeklenebilirliğini artırmak için vazgeçilmez bir araçtır. WordPress için Object Cache, PHP ve Node.js için session ve sorgu önbelleği olarak kullanılan Redis, doğru konfigürasyon ile sunucu yükünü ciddi oranda azaltır.
Pub/Sub, Streams ve Yaygın Desenler
Pub/Sub — Real-time Mesajlaşma
# Subscriber
redis-cli SUBSCRIBE bildirim
# Publisher
redis-cli PUBLISH bildirim "Yeni siparis: #1234"
Chat uygulamaları, real-time bildirim, server-side events için ideal. Mesaj kaybedilebilir (subscriber bağlı değilse alamaz).
Streams — Persisted Mesaj Kuyruğu
# Yazma
XADD events * type "order" id 1234
# Tüketici grubu
XGROUP CREATE events workers $ MKSTREAM
XREADGROUP GROUP workers worker1 COUNT 10 BLOCK 0 STREAMS events >
XACK events workers <message-id>
Streams Kafka benzeridir; mesaj kalıcıdır, consumer group desteklenir, replay yapılabilir.
Yaygın Production Desenleri
Rate Limiting (sliding window):
-- Lua script — atomik rate limit kontrolü
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local current = redis.call('INCR', key)
if current == 1 then
redis.call('EXPIRE', key, window)
end
if current > limit then return 0 end
return 1
Distributed Lock (Redlock):
# SETNX + TTL — basit lock (tek instance)
SET mylock "owner-id" NX PX 30000
# İş bittikten sonra:
DEL mylock # (lua ile owner kontrollü silmek daha güvenli)
Çoklu Redis instance için Redlock algoritması (5 master üzerinde quorum) kullanılır.
Leaderboard:
ZADD oyun_skor 9500 "ahmet"
ZADD oyun_skor 8700 "mehmet"
ZREVRANGE oyun_skor 0 9 WITHSCORES # En yüksek 10
ZREVRANK oyun_skor "ahmet" # Ahmet'in sırası
Counter (atomic):
INCR sayfa_goruntuleme:2026-05-07
INCRBY urun_satis:1234 5
Yüksek Erişilebilirlik: Sentinel ve Cluster
Sentinel — Master/Replica Failover
3 Sentinel + 1 master + 2 replica yapısı, otomatik failover sağlar:
# /etc/redis/sentinel.conf
port 26379
sentinel monitor mymaster 192.168.1.10 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
İstemci Sentinel'lere bağlanır; master node'un IP'sini öğrenir. Master düşerse Sentinel quorum (≥2) ile bir replica'yı master'a yükseltir.
Redis Cluster — Sharding ve HA Birlikte
Veriyi 16384 hash slot üzerinde 6 (3 master + 3 replica) veya daha fazla node'a dağıtır:
redis-cli --cluster create \
192.168.1.10:6379 192.168.1.11:6379 192.168.1.12:6379 \
192.168.1.13:6379 192.168.1.14:6379 192.168.1.15:6379 \
--cluster-replicas 1
Cluster modunda multi-key komutlar (MSET, transaction) sadece aynı hash slot'taki anahtarlarda çalışır. Aynı slot için {tag} notation kullanılır: SET {user42}:profil ... ; SET {user42}:sepet ...
Büyükweb VDS sunucularında 3 ayrı VDS ile Sentinel veya Cluster üyeleri yapılandırılabilir; Türkiye Tier 3 lokasyonu düşük inter-node gecikme sağlar.
Performans Tuning ve Pipelining
Pipelining
Redis komutlarını tek tek göndermek round-trip latency yaratır. Pipelining ile birden çok komut tek seferde gönderilir:
# Yavaş: her SET ayrı round-trip
for i in {1..1000}; do redis-cli SET key:$i $i; done # ~10 sn
# Hızlı: pipelining
seq 1000 | xargs -I {} echo "SET key:{} {}" | redis-cli --pipe # ~0.1 sn
PHP, Node.js sürücüleri pipelining API'si sunar; toplu yazmalarda 50-100 kat hız artışı tipiktir.
Connection Pooling
// Node.js — ioredis ile connection pool (varsayılan tek bağlantı multiplexed)
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
enableReadyCheck: true,
maxRetriesPerRequest: 3,
});
// PHP — Predis client pool
$pool = new Predis\Client([...], ['parameters' => ['persistent' => true]]);
Yavaş Sorgu Tespiti
# Slowlog ayarı
redis-cli CONFIG SET slowlog-log-slower-than 10000 # 10 ms üstü
redis-cli SLOWLOG GET 10 # Son 10 yavaş komut
KEYS * komutunu asla production'da kullanmayın — tüm Redis'i bloklar. SCAN cursor tabanlı tarama yerine kullanılmalıdır.
Sıkça Sorulan Sorular (Redis)
Redis mi Memcached mi?
Memcached basit key-value, sadece string. Redis: list, set, sorted set, hash, stream, pub/sub, persistence — çok daha zengin. Yeni projelerde varsayılan tercih Redis.
RAM tükenirse ne olur?
maxmemory-policy noeviction ise yeni yazma reddedilir; allkeys-lru ise eski anahtarlar silinir. Cache senaryosunda LRU mutlak.
Redis'i başka sunucudan dinlemeye açayım mı?
Yalnızca VPN, private subnet veya stunnel/TLS arkasında. bind 0.0.0.0 + şifresiz Redis bot taramalarıyla 5 dakikada hacklenir. requirepass + ACL + TLS olmadan açmayın.
Hangi sürümü kullanmalıyım?
Redis 7.0 ve 7.2 LTS sürümleri 2026 itibarıyla üretim için önerilir. Redis 8 (2025 sonu çıkış) yeni search ve JSON modüllerini core'a taşıdı; yeni projeler için tercih edilebilir. Valkey (Redis fork'u, BSD lisanslı) bulut sağlayıcılarda alternatif olarak öne çıktı.
WordPress için Object Cache yetiyor mu?
Çoğu site için evet. Yüksek trafikli (>500K aylık ziyaret) e-ticarette Object Cache + Page Cache (LiteSpeed Cache veya Cloudflare APO) birlikte ideal sonuç verir.
Hosting önerisi?
Redis düşük gecikme + yüksek RAM ister. NVMe disk + bol RAM'li VDS ideal — Büyükweb E5 v4 VDS bu profile uygun. Redis ile uygulamayı aynı sunucuda çalıştırmak (loopback üzerinden) en düşük gecikmeyi verir.
İlgili Büyükweb Hizmetleri
Yönetimini kontrol etmek istediğiniz sunucu için Büyükweb VDS / VPS / dedicated paketleri:
Sorularınız için 0850 302 60 70 numaralı destek hattımıza veya iletişim sayfamıza yazabilirsiniz.
Sunucu Yönetimi İlgili Hizmetlerimiz
Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin
Etiketler:

