Ana içeriğe geç
Kategoriye Dön

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.

Okuma süresi: 15 dk Veritabanı
redismemcachedcachekurulumubuntudebianlinuxperformans

İç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:

ÖzellikRedisMemcached
Veri yapılarıString, Hash, List, Set, ZSetYalnızca String
PersistenceRDB + AOFYok
ReplikasyonMaster-Replica + ClusterYok
Pub/SubVarYok
Lua scriptingVarYok
Çoklu iş parçacığıKısmi (I/O)Tam
Bellek verimliliğiOrtaYü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

hljs bash
# 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)

hljs bash
# 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

hljs bash
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)

hljs bash
# 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ı

hljs bash
# Yapılandırma dosyasını düzenle
nano /etc/redis/redis.conf
hljs ini
# 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

hljs bash
systemctl restart redis-server

# Yapılandırmayı doğrula
redis-cli -a GucluRedisParolasi123! ping
# Çıktı: PONG

Redis Temel Komutları

Bağlantı ve Temel İşlemler

hljs bash
# 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
hljs redis
# 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ı

hljs redis
# 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ı

hljs redis
# 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ı

hljs redis
# 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:

hljs ini
# /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:

hljs ini
# 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

hljs bash
# 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

hljs bash
# Memcached kur
dnf install -y memcached

# Servisi başlat ve etkinleştir
systemctl start memcached
systemctl enable memcached

Memcached Yapılandırması

hljs bash
# Yapılandırma dosyasını düzenle
nano /etc/memcached.conf
hljs ini
# 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
hljs bash
# Servisi yeniden başlat
systemctl restart memcached

# Bağlantıyı test et
echo 'stats' | nc 127.0.0.1 11211

Memcached Temel Komutları

hljs bash
# 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

hljs bash
# PHP Redis eklentisini kur
apt install -y php-redis
systemctl restart php8.x-fpm
hljs php
<?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

hljs bash
# ioredis paketini kur
npm install ioredis
hljs javascript
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

hljs bash
# redis-py paketini kur
pip install redis
hljs python
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

hljs bash
# 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.