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 Teknik Ekibi20 Eylül 20247 dakika okuma

Redis Kurulumu ve Önbellekleme

Redis (Remote Dictionary Server), bellek içi (in-memory) veri yapısı deposudur. Önbellekleme, oturum yönetimi, gerçek zamanlı analitik ve mesajlaşma için kullanılır.

Redis Neden Kullanılır?

  • Önbellekleme: Veritabanı sorgularını önbelleğe alarak yük azaltma
  • Session yönetimi: Dağıtık oturum depolama
  • Rate limiting: API istek sınırlama
  • Pub/Sub: Gerçek zamanlı mesajlaşma
  • Leaderboard: Sıralama tabloları (Sorted Sets)
  • Queue: İş kuyruğu yönetimi

Kurulum

Ubuntu/Debian:

apt update
apt install redis-server

systemctl enable --now redis-server
redis-cli ping  # PONG döner

RHEL/Rocky Linux:

dnf install redis
systemctl enable --now redis
redis-cli ping

Docker ile:

docker run -d --name redis -p 6379:6379 redis:alpine
docker exec -it redis redis-cli

Temel Yapılandırma

# /etc/redis/redis.conf veya /etc/redis.conf

# Bind adresi (sadece lokal için)
bind 127.0.0.1

# Şifre koru
requirepass guclu_redis_sifresi_2024

# Maksimum bellek
maxmemory 256mb
maxmemory-policy allkeys-lru

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

systemctl restart redis

Redis CLI Temel Komutları

# Bağlan
redis-cli
redis-cli -h 127.0.0.1 -p 6379 -a sifre

# Kimlik doğrulama
AUTH sifre

# Anahtar-değer
SET kullanici:1:isim "Ahmet Yılmaz"
GET kullanici:1:isim

# TTL (saniye cinsinden yaşam süresi)
SETEX oturum:token123 3600 "kullanici_id:42"
TTL oturum:token123   # Kalan süre
PERSIST oturum:token123  # TTL kaldır

# Anahtarları listele
KEYS kullanici:*
SCAN 0 MATCH kullanici:* COUNT 100  # Büyük DB için güvenli

# Anahtar sil
DEL kullanici:1:isim

Redis Veri Yapıları

String (Metin):

SET sayac 0
INCR sayac          # 1
INCRBY sayac 10     # 11
DECRBY sayac 3      # 8

Hash (Nesne/Map):

HSET kullanici:42 isim "Ahmet" email "ahmet@sitem.com" yas 30
HGET kullanici:42 isim
HGETALL kullanici:42
HMSET urun:1 isim "Laptop" fiyat 15000 stok 50

List (Sıralı Liste):

RPUSH isler "iş1" "iş2" "iş3"
LPOP isler   # Baş'tan al (queue)
LRANGE isler 0 -1  # Tüm liste

Set (Benzersiz Küme):

SADD online_kullanicilar "user1" "user2" "user3"
SMEMBERS online_kullanicilar
SISMEMBER online_kullanicilar "user1"
SREM online_kullanicilar "user2"

Sorted Set (Sıralı Küme - Leaderboard):

ZADD puan_tablosu 1500 "oyuncu1" 2300 "oyuncu2" 800 "oyuncu3"
ZRANGE puan_tablosu 0 -1 WITHSCORES
ZREVRANGE puan_tablosu 0 2  # İlk 3
ZSCORE puan_tablosu "oyuncu1"

PHP ile Redis

apt install php-redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('sifre');

// Önbellekleme örneği
function getKullanici($id) {
    global $redis, $pdo;

    $cacheKey = "kullanici:{$id}";
    $cached = $redis->get($cacheKey);

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

    $stmt = $pdo->prepare("SELECT * FROM kullanicilar WHERE id = ?");
    $stmt->execute([$id]);
    $kullanici = $stmt->fetch(PDO::FETCH_ASSOC);

    // 1 saat önbellekle
    $redis->setex($cacheKey, 3600, json_encode($kullanici));

    return $kullanici;
}

// Session yönetimi
$redis->setex("session:{$token}", 3600, json_encode($sessionData));

Node.js ile Redis

npm install redis
const { createClient } = require('redis');

const client = createClient({
    socket: { host: '127.0.0.1', port: 6379 },
    password: 'sifre'
});

await client.connect();

// Önbellekleme
async function getUrun(id) {
    const cached = await client.get('urun:' + id);
    if (cached) return JSON.parse(cached);

    const urun = await db.query('SELECT * FROM urunler WHERE id = ?', [id]);
    await client.setEx('urun:' + id, 300, JSON.stringify(urun));
    return urun;
}

// Rate limiting
async function rateLimit(ip) {
    const key = 'ratelimit:' + ip;
    const count = await client.incr(key);
    if (count === 1) await client.expire(key, 60);
    return count > 100; // Saniyede 100 istek limiti
}

Monitoring

# Redis istatistikleri
redis-cli info
redis-cli info memory
redis-cli info stats

# Anlık komut izleme (dikkatli - performans etkiler)
redis-cli monitor

# Yavaş sorgu log
redis-cli slowlog get 10
redis-cli config set slowlog-log-slower-than 10000  # 10ms

# Bellek kullanımı
redis-cli memory usage kullanici:42

Büyükweb VDS sunucularında Redis ile uygulama performansınızı önemli ölçüde artırabilirsiniz. Sunucu kaynaklarınıza göre Redis bellek ayarlarını optimize edin.


Veritabani Performans Optimizasyonu

Veritabani web uygulamalarinin kalbidir.

MySQL/MariaDB Tuning

innodb_buffer_pool_size'i RAM'in %60-70'ine ayarlayin. slow_query_log ile yavas sorgulari tespit edin. max_connections optimize edin.

Indeksleme

WHERE, JOIN, ORDER BY sutunlarina indeks ekleyin. EXPLAIN ile sorgu planlari analiz edin. Composite index kullanin.

Baglanti Havuzu

ProxySQL ile gelismis baglanti yonetimi. Connection pooling ile maliyet azaltma. Persistent connections kullanin.

Replikasyon

Master-Slave ile okuma yukunu dagitin. Galera Cluster ile multi-master yuksek erisilebilirlik. Semi-senkron replikasyon degerlendirin.

Yedekleme

mysqldump mantiksal, xtrabackup fiziksel yedek. Binary log ile point-in-time recovery. Incremental yedekleme ile tasarruf.

Sik Sorulan Sorular

MySQL mi PostgreSQL mi?

MySQL cogu web uygulamasi ile uyumlu. PostgreSQL gelismis veri tipleri ve JSON icin ideal. CMS'ler genelde MySQL kullanir.

Veritabanim buyudu ne yapmaliyim?

Gereksiz verileri temizleyin, tablo optimize edin, arsivleme yapin, partitioning kullanin.

Ne siklikla yedek almaliyim?

Kritik veritabanlari saatlik, standart siteler gunluk. Buyuk degisikliklerden once manuel yedek.

Sonuc

Veritabani optimizasyonu uygulama performansini dogrudan etkiler. Indeksleme, tuning ve yedekleme ile veri katmaninizi guclendirin.

Veritabani Boyut Yonetimi

Buyuk Tablolar icin Stratejiler

  • Partitioning: Tarihe gore tablolari bolumlendirin. Sorgu performansi artar.
  • Arsivleme: Eski verileri arsiv tablolarina tasiyin.
  • Sikistirma: InnoDB sikistirmasi ile disk kullanimini %50-75 azaltin.

WordPress Veritabani Optimizasyonu

  • wp_options autoload: Gereksiz autoload kayitlari temizleyin.
  • Post revisions: wp-config.php'de WP_POST_REVISIONS sinirlayin.
  • Transient veriler: Suresi dolmus verileri duzenli temizleyin.
  • Spam yorumlar: Toplu silin.

Veritabani Guvenlik

  • Varsayilan portu degistirin
  • Uygulama bazli kullanici olusturun
  • Minimum gerekli yetki verin
  • SSL ile baglanti sifreleyin
  • Duzenli guvenlik taramasi yapin

Hosting ve Sunucu Terimleri Sozlugu

Terim Aciklama
VDS Virtual Dedicated Server - Sanal ozel sunucu
NVMe SSD Non-Volatile Memory Express - En hizli disk teknolojisi
LiteSpeed Yuksek performansli web sunucu yazilimi
CloudLinux Paylasimli hosting icin kaynak izolasyon isletim sistemi
cPanel Populer web hosting kontrol paneli
Plesk Web hosting ve sunucu yonetim paneli
KVM Kernel-based Virtual Machine - Tam sanallastirma teknolojisi
DDoS Distributed Denial of Service - Dagitik hizmet engelleme saldirisi
SSL/TLS Veri iletisimini sifreleyen guvenlik protokolu
TTFB Time to First Byte - Sunucu yanit suresi
CDN Content Delivery Network - Icerik dagitim agi
WAF Web Application Firewall - Web uygulama guvenligi duvari
IOPS Input/Output Operations Per Second - Disk performans olcusu
Uptime Sunucunun kesintisiz calisma suresi yuzdesi
Bandwidth Veri transfer kapasitesi

Bu terimleri anlamak, hosting ve sunucu hizmetlerini daha bilinçli secmenize yardimci olur. Detayli bilgi icin Buyukweb blog yazilarini takip edin veya teknik destek ekibimize danisIn.

Teknik Destek ve Yardim Kanallari

Buyukweb olarak musterilerimize birden fazla destek kanali sunuyoruz:

Canli Destek (Tawk.to)

Web sitemiz uzerinden 7/24 canli destek ile aninda yardim alin. Teknik sorulariniz, fatura islemleriniz ve genel bilgi talepleriniz icin canli destek ekibimiz hizmetinizdedir.

Telefon Destegi

0850 302 60 70 numarasindan hafta ici ve hafta sonu teknik destek alabilirsiniz. Acil durumlar ve karmasik sorunlar icin telefon destegi en hizli cozum yoludur.

E-posta Destegi

destek@buyukweb.com adresine detayli sorun tanimlamanizi gonderin. Ekran goruntuleri ve hata mesajlari ile birlikte gonderdiginiz talepler daha hizli cozumlenir.

Musteri Paneli

my.buyukweb.com uzerinden destek talepleri olusturun, faturalarinizi yonetin ve hizmetlerinizi kontrol edin. Ticket sistemi ile tum iletisiminiz kayit altindadir.

Bilgi Bankasi

Blog yazilarimiz ve rehberlerimiz ile sik karsilasilan sorunlarin cozumlerini kendiniz bulabilirsiniz. WordPress kurulumu, DNS ayarlari, e-posta yapilandirmasi gibi konularda adim adim rehberler mevcuttur.

Buyukweb teknik ekibi, hosting alaninda 17 yillik tecrubesi ile her turlu sorununuza profesyonel cozum sunar.

Etiketler:

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

Bu yazıyı paylaş