Redis ve Memcached Kurulumu: Cache Katmanı Rehberi
Redis ve Memcached kurulumu, temel komutlar, persistence ayarları, Redis vs Memcached karşılaştırması ve uygulama entegrasyonu. Adım adım cache katmanı rehberi.
İçindekiler
Redis ve Memcached Kurulumu: Cache Katmanı Rehberi
Cache (önbellek) katmanı, web uygulamalarının performansını dramatik biçimde artıran kritik bir altyapı bileşenidir. Veritabanı sorgularını, API yanıtlarını ve hesaplama sonuçlarını bellekte tutarak tekrarlayan isteklere milisaniyeler içinde yanıt verilmesini sağlar. Bu rehberde en yaygın kullanılan iki cache sistemi olan Redis ve Memcached'in kurulumunu, yapılandırmasını ve uygulama entegrasyonunu ele alacağız.
Redis mi Memcached mi?
Her iki sistem de yüksek performanslı bellek içi veri depolama çözümleri sunar, ancak farklı kullanım senaryolarına hitap eder:
| Özellik | Redis | Memcached |
|---|---|---|
| Veri yapıları | String, Hash, List, Set, ZSet | Yalnızca String |
| Persistence | RDB + AOF | Yok |
| Replikasyon | Master-Replica + Cluster | Yok |
| Pub/Sub | Var | Yok |
| Lua scripting | Var | Yok |
| Çoklu iş parçacığı | Kısmi (I/O) | Tam |
| Bellek verimliliği | Orta | Yüksek |
Yeni projeler için Redis önerilir. Zengin veri yapıları, persistence ve replikasyon desteği ile çok daha fazla kullanım senaryosunu karşılar. Memcached yalnızca basit string cache ve maksimum çoklu iş parçacığı performansı gerektiğinde tercih edilir.
Redis Kurulumu (Ubuntu/Debian)
Paket Deposundan Kurulum
# Paket listesini güncelle
apt update
# Redis kur
apt install -y redis-server
# Servis durumunu kontrol et
systemctl status redis-server
# Otomatik başlatmayı etkinleştir
systemctl enable redis-server
Resmi Redis Deposundan Kurulum (Güncel Sürüm)
# Gerekli araçları kur
apt install -y curl gpg
# Redis GPG anahtarını ekle
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# Depoyu ekle
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
# Güncelle ve kur
apt update
apt install -y redis
Redis Sürümünü Doğrulama
redis-server --version
# Çıktı: Redis server v=7.x.x ...
redis-cli --version
# Çıktı: redis-cli 7.x.x
Redis Kurulumu (CentOS/AlmaLinux/Rocky Linux)
# EPEL deposunu etkinleştir
dnf install -y epel-release
# Redis kur
dnf install -y redis
# Servisi başlat ve etkinleştir
systemctl start redis
systemctl enable redis
# Durumu kontrol et
systemctl status redis
Redis Yapılandırması
Temel Yapılandırma Dosyası
# Yapılandırma dosyasını düzenle
nano /etc/redis/redis.conf
# Dinleme adresi (sadece localhost için)
bind 127.0.0.1
# Port (varsayılan 6379)
port 6379
# Şifre koruması
requirepass GucluRedisParolasi123!
# Maksimum bellek kullanımı
maxmemory 512mb
# Bellek dolduğunda tahliye politikası
maxmemory-policy allkeys-lru
# Arka planda çalıştır
daemonize yes
# Log dosyası
logfile /var/log/redis/redis-server.log
# Veritabanı sayısı
databases 16
Yapılandırmayı Uygula
systemctl restart redis-server
# Yapılandırmayı doğrula
redis-cli -a GucluRedisParolasi123! ping
# Çıktı: PONG
Redis Temel Komutları
Bağlantı ve Temel İşlemler
# Redis CLI'ya bağlan
redis-cli
# Şifre ile bağlan
redis-cli -a GucluRedisParolasi123!
# Uzak sunucuya bağlan
redis-cli -h 192.168.1.100 -p 6379 -a sifre
# Bağlantı testi
PING
# Yanıt: PONG
# String değer set et
SET kullanici:1:isim 'Ahmet Yilmaz'
# Değer oku
GET kullanici:1:isim
# TTL ile değer set et (saniye cinsinden)
SETEX oturum:abc123 3600 'kullanici_verisi'
# Kalan süreyi kontrol et
TTL oturum:abc123
# Değeri sil
DEL kullanici:1:isim
# Anahtar var mı kontrol et
EXISTS kullanici:1:isim
# Tüm anahtarları listele (üretimde dikkatli kullan)
KEYS *
# Belirli pattern ile ara
KEYS kullanici:*
Hash Komutları
# Hash set et
HSET kullanici:1 isim 'Ahmet' email 'ahmet@example.com' yas 30
# Hash alanı oku
HGET kullanici:1 isim
# Tüm hash alanlarını oku
HGETALL kullanici:1
# Hash alanını sil
HDEL kullanici:1 yas
# Hash alanı var mı
HEXISTS kullanici:1 email
List Komutları
# Listeye eleman ekle (sola)
LPUSH gorevler 'gorev1' 'gorev2'
# Listeye eleman ekle (sağa)
RPUSH gorevler 'gorev3'
# Listeden eleman al (soldan)
LPOP gorevler
# Liste uzunluğu
LLEN gorevler
# Liste aralığı
LRANGE gorevler 0 -1
Set ve Sorted Set Komutları
# Set'e eleman ekle
SADD etiketler 'redis' 'cache' 'nosql'
# Set elemanlarını listele
SMEMBERS etiketler
# Sorted Set'e skor ile ekle
ZADD liderlik 1500 'oyuncu1' 2300 'oyuncu2' 800 'oyuncu3'
# Sıralı listele (artan)
ZRANGE liderlik 0 -1 WITHSCORES
# Sıralı listele (azalan)
ZREVRANGE liderlik 0 2 WITHSCORES
Redis Persistence Ayarları
RDB (Redis Database) Snapshot
RDB, belirli aralıklarla tüm veri setinin anlık görüntüsünü diske yazar:
# /etc/redis/redis.conf
# 900 saniyede 1 değişiklik varsa kaydet
save 900 1
# 300 saniyede 10 değişiklik varsa kaydet
save 300 10
# 60 saniyede 10000 değişiklik varsa kaydet
save 60 10000
# RDB dosya adı
dbfilename dump.rdb
# RDB dizini
dir /var/lib/redis
AOF (Append Only File)
AOF, her yazma işlemini log dosyasına ekler ve daha güvenilir persistence sağlar:
# AOF'u etkinleştir
appendonlyfile yes
# AOF dosya adı
appendfilename 'appendonly.aof'
# Senkronizasyon politikası
# always: Her yazma işleminde (en güvenli, en yavaş)
# everysec: Her saniye (önerilen)
# no: OS'a bırak (en hızlı, en az güvenli)
appendsync everysec
# AOF yeniden yazma eşiği
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
Üretim ortamında hem RDB hem AOF kullanmak önerilir. RDB hızlı yeniden başlatma, AOF ise veri kaybını minimize etme sağlar.
Memcached Kurulumu
Ubuntu/Debian'da Kurulum
# Paket listesini güncelle
apt update
# Memcached kur
apt install -y memcached libmemcached-tools
# Servis durumunu kontrol et
systemctl status memcached
# Otomatik başlatmayı etkinleştir
systemctl enable memcached
CentOS/AlmaLinux'ta Kurulum
# Memcached kur
dnf install -y memcached
# Servisi başlat ve etkinleştir
systemctl start memcached
systemctl enable memcached
Memcached Yapılandırması
# Yapılandırma dosyasını düzenle
nano /etc/memcached.conf
# Bellek limiti (MB)
-m 256
# Dinleme adresi
-l 127.0.0.1
# Port
-p 11211
# Maksimum bağlantı sayısı
-c 1024
# İş parçacığı sayısı (CPU çekirdeği sayısına göre)
-t 4
# Maksimum nesne boyutu (byte)
-I 1m
# Servisi yeniden başlat
systemctl restart memcached
# Bağlantıyı test et
echo 'stats' | nc 127.0.0.1 11211
Memcached Temel Komutları
# telnet ile bağlan
telnet 127.0.0.1 11211
# Değer set et (anahtar, flag, TTL saniye, boyut byte)
set oturum:xyz 0 3600 12
kullanici_data
# Değer oku
get oturum:xyz
# Değeri sil
delete oturum:xyz
# İstatistikleri görüntüle
stats
# Tüm verileri temizle
flush_all
Uygulama Entegrasyonu
PHP ile Redis Entegrasyonu
# PHP Redis eklentisini kur
apt install -y php-redis
systemctl restart php8.x-fpm
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('GucluRedisParolasi123!');
// Cache'e yaz
$redis->setex('kullanici:1', 3600, json_encode(['isim' => 'Ahmet', 'email' => 'ahmet@example.com']));
// Cache'den oku
$veri = $redis->get('kullanici:1');
if ($veri) {
$kullanici = json_decode($veri, true);
} else {
// Veritabanından al ve cache'e yaz
$kullanici = veritabanindan_al(1);
$redis->setex('kullanici:1', 3600, json_encode($kullanici));
}
Node.js ile Redis Entegrasyonu
# ioredis paketini kur
npm install ioredis
const Redis = require('ioredis');
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: 'GucluRedisParolasi123!'
});
// Cache'e yaz
await redis.setex('urun:42', 1800, JSON.stringify({ ad: 'Laptop', fiyat: 15000 }));
// Cache'den oku
const veri = await redis.get('urun:42');
if (veri) {
const urun = JSON.parse(veri);
console.log(urun);
}
// Cache'i temizle
await redis.del('urun:42');
Python ile Redis Entegrasyonu
# redis-py paketini kur
pip install redis
import redis
import json
r = redis.Redis(
host='127.0.0.1',
port=6379,
password='GucluRedisParolasi123!',
decode_responses=True
)
# Cache'e yaz
r.setex('makale:5', 7200, json.dumps({'baslik': 'Redis Rehberi', 'icerik': '...'}))
# Cache'den oku
veri = r.get('makale:5')
if veri:
makale = json.loads(veri)
Servis Yönetimi
# Redis servis yönetimi
systemctl start redis-server
systemctl stop redis-server
systemctl restart redis-server
systemctl status redis-server
# Redis loglarını görüntüle
journalctl -u redis-server -f
tail -f /var/log/redis/redis-server.log
# Redis CLI ile bilgi al
redis-cli INFO server
redis-cli INFO memory
redis-cli INFO stats
# Memcached servis yönetimi
systemctl start memcached
systemctl stop memcached
systemctl restart memcached
systemctl status memcached
Sonuç
Redis ve Memcached, uygulama performansını önemli ölçüde artıran güçlü cache çözümleridir. Redis'in zengin veri yapıları ve persistence özellikleri onu çoğu senaryo için ideal kılarken, Memcached basit ve yüksek performanslı string cache ihtiyaçları için tercih edilebilir. REXE sunucularında her iki sistem de sorunsuz çalışmaktadır.
İlgili Makaleler
MySQL ve MariaDB Kurulumu: Temel Yönetim Rehberi
MySQL ve MariaDB kurulumu, mysql_secure_installation, veritabanı ve kullanıcı oluşturma, temel SQL komutları, uzak erişim yapılandırması ve performans ayarları. Adım adım rehber.
PostgreSQL Kurulum ve Temel Yönetim Rehberi
PostgreSQL kurulumu, kullanıcı ve veritabanı oluşturma, temel SQL komutları, uzak bağlantı yapılandırması ve yedekleme. Ubuntu/Debian ve RHEL/CentOS için adım adım rehber.
phpMyAdmin Kurulumu ve Güvenli Erişim Rehberi
phpMyAdmin kurulumu, Apache ve Nginx yapılandırması, SSL ile güvenli erişim, kullanıcı yönetimi ve güvenlik sertleştirme adımları. Adım adım rehber.