Redis Cache Sunucusu Kurulumu ve Yönetimi
Redis cache sunucusu kurulumu, yapılandırması, performans optimizasyonu ve cluster yönetimi. In-memory veritabanı yönetimi rehberi.
8 min read
1.524 words
Redis Cache Sunucusu Kurulumu ve Yönetimi#
Redis (Remote Dictionary Server), yüksek performanslı in-memory veri yapısı sunucusudur. Cache, session storage, message broker ve gerçek zamanlı analytics için yaygın olarak kullanılır.
Redis Kurulumu#
Ubuntu/Debian Sistemlerde Kurulum#
# Paket listesini güncelle sudo apt update # Redis kurulumu sudo apt install redis-server # Redis servisini başlat ve etkinleştir sudo systemctl start redis-server sudo systemctl enable redis-server # Redis durumunu kontrol et sudo systemctl status redis-server # Redis CLI ile bağlantı testi redis-cli ping
CentOS/RHEL Sistemlerde Kurulum#
# EPEL repository ekle sudo yum install epel-release # Redis kurulumu sudo yum install redis # Servisi başlat ve etkinleştir sudo systemctl start redis sudo systemctl enable redis # Firewall ayarları (gerekirse) sudo firewall-cmd --permanent --add-port=6379/tcp sudo firewall-cmd --reload
Kaynak Koddan Kurulum#
# Gerekli paketleri kur sudo apt install build-essential tcl # Redis kaynak kodunu indir cd /tmp wget http://download.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd redis-stable # Derle ve kur make make test sudo make install # Yapılandırma dizinini oluştur sudo mkdir /etc/redis sudo cp redis.conf /etc/redis/
Redis Yapılandırması#
Ana Yapılandırma Dosyası (/etc/redis/redis.conf)#
# Ağ ayarları bind 127.0.0.1 ::1 port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 # Genel ayarlar daemonize yes supervised systemd pidfile /var/run/redis/redis-server.pid loglevel notice logfile /var/log/redis/redis-server.log databases 16 # Snapshot ayarları (RDB) save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /var/lib/redis # Append Only File (AOF) appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # Memory yönetimi maxmemory 2gb maxmemory-policy allkeys-lru maxmemory-samples 5 # Güvenlik requirepass YourStrongPasswordHere rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command DEBUG "" # Client ayarları maxclients 10000
Güvenlik Yapılandırması#
# Güçlü şifre ayarla echo "requirepass $(openssl rand -base64 32)" | sudo tee -a /etc/redis/redis.conf # Tehlikeli komutları devre dışı bırak echo 'rename-command FLUSHDB ""' | sudo tee -a /etc/redis/redis.conf echo 'rename-command FLUSHALL ""' | sudo tee -a /etc/redis/redis.conf echo 'rename-command DEBUG ""' | sudo tee -a /etc/redis/redis.conf echo 'rename-command CONFIG "CONFIG_b835729cb8df8ca2e"' | sudo tee -a /etc/redis/redis.conf # Sadece localhost'tan erişime izin ver sudo sed -i 's/^bind .*/bind 127.0.0.1 ::1/' /etc/redis/redis.conf # Redis'i yeniden başlat sudo systemctl restart redis-server
Temel Redis Komutları#
String İşlemleri#
# Redis CLI'ya bağlan redis-cli -a YourPassword # String set/get SET mykey "Hello World" GET mykey MSET key1 "value1" key2 "value2" key3 "value3" MGET key1 key2 key3 # Sayısal işlemler SET counter 100 INCR counter INCRBY counter 5 DECR counter DECRBY counter 3 # Expiration SET session:user123 "active" EX 3600 # 1 saat TTL session:user123 EXPIRE mykey 300 # 5 dakika
Hash İşlemleri#
# Hash set/get HSET user:1000 name "John Doe" email "[email protected]" age 30 HGET user:1000 name HMGET user:1000 name email HGETALL user:1000 # Hash field işlemleri HEXISTS user:1000 name HDEL user:1000 age HKEYS user:1000 HVALS user:1000 HLEN user:1000
List İşlemleri#
# List push/pop LPUSH mylist "first" RPUSH mylist "second" "third" LRANGE mylist 0 -1 LPOP mylist RPOP mylist # List indexing LINDEX mylist 0 LSET mylist 0 "new_value" LLEN mylist
Set İşlemleri#
# Set add/remove SADD myset "member1" "member2" "member3" SMEMBERS myset SISMEMBER myset "member1" SREM myset "member2" SCARD myset # Set operations SADD set1 "a" "b" "c" SADD set2 "b" "c" "d" SINTER set1 set2 # Kesişim SUNION set1 set2 # Birleşim SDIFF set1 set2 # Fark
Sorted Set İşlemleri#
# Sorted set add/get ZADD leaderboard 100 "player1" 200 "player2" 150 "player3" ZRANGE leaderboard 0 -1 WITHSCORES ZREVRANGE leaderboard 0 2 WITHSCORES # En yüksek skorlar ZSCORE leaderboard "player1" ZRANK leaderboard "player1"
Performans Optimizasyonu#
Memory Optimizasyonu#
# Memory kullanımını kontrol et redis-cli -a YourPassword INFO memory # Memory policy ayarları CONFIG SET maxmemory 2gb CONFIG SET maxmemory-policy allkeys-lru # Memory kullanımını azaltma CONFIG SET hash-max-ziplist-entries 512 CONFIG SET hash-max-ziplist-value 64 CONFIG SET list-max-ziplist-size -2 CONFIG SET set-max-intset-entries 512 CONFIG SET zset-max-ziplist-entries 128 CONFIG SET zset-max-ziplist-value 64
Persistence Optimizasyonu#
# RDB ayarları CONFIG SET save "900 1 300 10 60 10000" CONFIG SET rdbcompression yes CONFIG SET rdbchecksum yes # AOF ayarları CONFIG SET appendonly yes CONFIG SET appendfsync everysec CONFIG SET auto-aof-rewrite-percentage 100 CONFIG SET auto-aof-rewrite-min-size 64mb
Network Optimizasyonu#
# TCP ayarları CONFIG SET tcp-keepalive 300 CONFIG SET timeout 0 # Client buffer ayarları CONFIG SET client-output-buffer-limit "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
Monitoring ve İstatistikler#
Temel İstatistikler#
# Genel bilgiler redis-cli -a YourPassword INFO # Memory bilgileri redis-cli -a YourPassword INFO memory # Client bilgileri redis-cli -a YourPassword INFO clients # Replication bilgileri redis-cli -a YourPassword INFO replication # Stats bilgileri redis-cli -a YourPassword INFO stats
Gerçek Zamanlı Monitoring#
# Monitor komutu (tüm komutları izle) redis-cli -a YourPassword MONITOR # Slow log (yavaş komutları izle) redis-cli -a YourPassword CONFIG SET slowlog-log-slower-than 10000 redis-cli -a YourPassword SLOWLOG GET 10 # Client listesi redis-cli -a YourPassword CLIENT LIST # Key space bilgileri redis-cli -a YourPassword INFO keyspace
Redis Benchmark#
# Performans testi redis-benchmark -h localhost -p 6379 -a YourPassword -n 100000 -c 50 # Belirli komutlar için test redis-benchmark -h localhost -p 6379 -a YourPassword -t set,get -n 100000 -q # Pipeline testi redis-benchmark -h localhost -p 6379 -a YourPassword -n 100000 -P 16 -q
Yedekleme ve Geri Yükleme#
RDB Yedekleme#
# Manuel snapshot al redis-cli -a YourPassword BGSAVE # Snapshot durumunu kontrol et redis-cli -a YourPassword LASTSAVE # RDB dosyasını kopyala sudo cp /var/lib/redis/dump.rdb /backup/redis/dump_$(date +%Y%m%d_%H%M%S).rdb
AOF Yedekleme#
# AOF rewrite başlat redis-cli -a YourPassword BGREWRITEAOF # AOF dosyasını yedekle sudo cp /var/lib/redis/appendonly.aof /backup/redis/appendonly_$(date +%Y%m%d_%H%M%S).aof
Otomatik Yedekleme Scripti#
#!/bin/bash # /usr/local/bin/redis_backup.sh REDIS_PASSWORD="YourPassword" BACKUP_DIR="/backup/redis" DATE=$(date +%Y%m%d_%H%M%S) RETENTION_DAYS=7 # Backup dizinini oluştur mkdir -p $BACKUP_DIR # RDB snapshot al redis-cli -a $REDIS_PASSWORD BGSAVE # Snapshot tamamlanana kadar bekle while [ $(redis-cli -a $REDIS_PASSWORD LASTSAVE) -eq $(redis-cli -a $REDIS_PASSWORD LASTSAVE) ]; do sleep 1 done # RDB dosyasını kopyala cp /var/lib/redis/dump.rdb $BACKUP_DIR/dump_$DATE.rdb # AOF dosyasını kopyala (varsa) if [ -f /var/lib/redis/appendonly.aof ]; then cp /var/lib/redis/appendonly.aof $BACKUP_DIR/appendonly_$DATE.aof fi # Eski yedekleri sil find $BACKUP_DIR -name "*.rdb" -mtime +$RETENTION_DAYS -delete find $BACKUP_DIR -name "*.aof" -mtime +$RETENTION_DAYS -delete echo "Redis backup completed: $DATE"
Cron job ekle:
# Her gün 02:00'da yedekleme 0 2 * * * /usr/local/bin/redis_backup.sh >> /var/log/redis_backup.log 2>&1
Redis Cluster Kurulumu#
3 Node Cluster Kurulumu#
# Her node için ayrı yapılandırma # Node 1 (7000 portu) port 7000 cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 5000 appendonly yes # Node 2 (7001 portu) port 7001 cluster-enabled yes cluster-config-file nodes-7001.conf cluster-node-timeout 5000 appendonly yes # Node 3 (7002 portu) port 7002 cluster-enabled yes cluster-config-file nodes-7002.conf cluster-node-timeout 5000 appendonly yes
# Redis instance'ları başlat redis-server /etc/redis/redis-7000.conf redis-server /etc/redis/redis-7001.conf redis-server /etc/redis/redis-7002.conf # Cluster oluştur redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 0 # Cluster durumunu kontrol et redis-cli -p 7000 cluster nodes redis-cli -p 7000 cluster info
Redis Sentinel (High Availability)#
Sentinel Yapılandırması#
# /etc/redis/sentinel.conf port 26379 sentinel monitor mymaster 127.0.0.1 6379 2 sentinel auth-pass mymaster YourPassword sentinel down-after-milliseconds mymaster 5000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 10000
# Sentinel başlat redis-sentinel /etc/redis/sentinel.conf # Sentinel durumunu kontrol et redis-cli -p 26379 SENTINEL masters redis-cli -p 26379 SENTINEL slaves mymaster
Uygulama Entegrasyonu#
PHP ile Redis Kullanımı#
<?php // Redis bağlantısı $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth('YourPassword'); // Cache işlemleri $redis->set('user:1000', json_encode(['name' => 'John', 'email' => '[email protected]'])); $user = json_decode($redis->get('user:1000'), true); // Session storage $redis->setex('session:' . session_id(), 3600, serialize($_SESSION)); // Counter $redis->incr('page_views'); $views = $redis->get('page_views'); ?>
Python ile Redis Kullanımı#
import redis import json # Redis bağlantısı r = redis.Redis(host='localhost', port=6379, password='YourPassword', decode_responses=True) # Cache işlemleri user_data = {'name': 'John', 'email': '[email protected]'} r.set('user:1000', json.dumps(user_data)) user = json.loads(r.get('user:1000')) # List işlemleri r.lpush('tasks', 'task1', 'task2', 'task3') tasks = r.lrange('tasks', 0, -1) # Pub/Sub r.publish('notifications', 'New message')
Troubleshooting#
Yaygın Sorunlar ve Çözümleri#
- Memory Kullanımı Yüksek
# Memory kullanımını analiz et redis-cli -a YourPassword --bigkeys # Memory policy ayarla CONFIG SET maxmemory-policy allkeys-lru
- Yavaş Performans
# Slow log kontrol et redis-cli -a YourPassword SLOWLOG GET 10 # Client bağlantılarını kontrol et redis-cli -a YourPassword CLIENT LIST
- Bağlantı Sorunları
# Network ayarlarını kontrol et netstat -tlnp | grep 6379 # Firewall kontrolü sudo ufw status | grep 6379
Güvenlik Best Practices#
Güvenlik Kontrol Listesi#
# 1. Şifre koruması requirepass StrongPasswordHere # 2. Bind address kısıtlama bind 127.0.0.1 # 3. Tehlikeli komutları devre dışı bırak rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command DEBUG "" # 4. Firewall kuralları sudo ufw allow from 192.168.1.0/24 to any port 6379 # 5. SSL/TLS (Redis 6.0+) tls-port 6380 tls-cert-file /path/to/redis.crt tls-key-file /path/to/redis.key
Sonuç#
Redis, yüksek performanslı cache ve veri depolama çözümü sunar. Bu rehberde ele aldığımız konular:
- Kurulum ve temel yapılandırma
- Veri türleri ve komutlar
- Performans optimizasyonu
- Monitoring ve troubleshooting
- Yedekleme stratejileri
- Cluster ve high availability
- Güvenlik yapılandırması
- Uygulama entegrasyonu
Doğru yapılandırma ve monitoring ile Redis'in tam potansiyelinden yararlanabilirsiniz.