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.
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.
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.
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.
# 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
# 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-server --version
# Çıktı: Redis server v=7.x.x ...
redis-cli --version
# Çıktı: redis-cli 7.x.x
# 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
# 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
systemctl restart redis-server
# Yapılandırmayı doğrula
redis-cli -a GucluRedisParolasi123! ping
# Çıktı: PONG
# 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 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
# 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'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
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, 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.
# 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
# Memcached kur
dnf install -y memcached
# Servisi başlat ve etkinleştir
systemctl start memcached
systemctl enable memcached
# 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
# 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
# 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));
}
# 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');
# 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)
# 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
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.
Yeni projeler için Redis önerilir. String dışında Hash, List, Set, Sorted Set gibi zengin veri yapıları sunar; RDB ve AOF ile persistence sağlar; Pub/Sub mesajlaşma ve Lua scripting destekler. Memcached yalnızca basit string cache ve tam çoklu iş parçacığı performansı gerektiğinde tercih edilir. Çoğu web uygulaması için Redis daha uygun bir seçimdir.
En yaygın politikalar: allkeys-lru (tüm anahtarlar arasında en az kullanılanı sil - genel cache için önerilir), volatile-lru (yalnızca TTL'li anahtarlar arasında LRU - karma kullanım için), allkeys-lfu (en az sıklıkta kullanılanı sil - tekrarlayan erişim kalıpları için), noeviction (bellek dolunca hata döndür - kritik veri için). Genel cache kullanımı için allkeys-lru en güvenli seçimdir.
İkisini birlikte kullanmak en iyi yaklaşımdır. RDB, belirli aralıklarla anlık görüntü alır ve hızlı yeniden başlatma sağlar ancak son snapshot'tan bu yana olan veriler kaybolabilir. AOF, her yazma işlemini loglar ve veri kaybını minimize eder ancak daha fazla disk I/O kullanır. Üretim ortamında her ikisini de etkinleştirin: save direktifleri ile RDB, appendonlyfile yes ile AOF.
redis.conf dosyasında bind 127.0.0.1 satırını bind 0.0.0.0 olarak değiştirin ve requirepass ile güçlü bir şifre belirleyin. Ardından firewall'da 6379 portunu açın: ufw allow 6379/tcp. Güvenlik için Redis portunu internete doğrudan açmak yerine SSH tüneli veya VPN kullanmanız önerilir. Mümkünse erişimi belirli IP adreslerine kısıtlayın.
Hayır, Memcached tamamen bellek içi bir sistemdir ve persistence desteği yoktur. Sunucu yeniden başlatıldığında tüm veriler kaybolur. Bu nedenle Memcached yalnızca yeniden oluşturulabilecek geçici cache verileri için kullanılmalıdır. Kalıcı veri depolama veya oturum yönetimi gibi senaryolar için Redis tercih edin.
redis-cli INFO memory komutu ile ayrıntılı bellek istatistiklerini görebilirsiniz. used_memory (kullanılan bellek), maxmemory (maksimum limit) ve mem_fragmentation_ratio (parçalanma oranı) değerlerine dikkat edin. Parçalanma oranı 1.5'in üzerindeyse MEMORY PURGE komutu ile belleği optimize edebilirsiniz. Ayrıca redis-cli --stat ile gerçek zamanlı istatistikleri izleyebilirsiniz.
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 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, 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.