İçindekiler
Redis, verileri bellekte (RAM) tutan son derece hızlı bir anahtar-değer veri deposudur. Diskteki bir veritabanından veri okumak milisaniyeler sürebilirken, Redis'ten okumak genellikle mikrosaniyeler düzeyindedir. Bu hız, onu web uygulamalarında önbellek olarak kullanmak için ideal kılar.
Ne için kullanılır?
- Nesne önbelleği: Ağır veritabanı sorgularının sonuçlarını saklamak.
- Oturum (session) deposu: PHP oturumlarını dosya sistemi yerine Redis'te tutmak. Birden fazla web sunucusu aynı oturumlara erişebilir.
- Kuyruklar: E-posta gönderimi ya da görsel işleme gibi arka plan işleri için iş kuyruğu.
- Sayaçlar ve istek sınırlama: "Bu IP son bir dakikada kaç istek yaptı?" gibi hızlı sayımlar.
- Liderlik tabloları, gerçek zamanlı istatistikler.
Redis bu işleri yapmak için basit anahtar-değer çiftlerinin yanında listeler, kümeler, sıralı kümeler ve hash'ler gibi veri yapıları sunar.
Kurulum
dnf install redis # RHEL / AlmaLinux 9
apt install redis-server # Debian / Ubuntu
systemctl enable --now redis
redis-cli ping
PONG cevabı geliyorsa Redis çalışıyor.
Not: Redis'in lisansı 2024'te değişti ve bazı dağıtımlar bunun üzerine, Redis ile uyumlu açık kaynak bir çatal (fork) olan Valkey'i sunmaya başladı. Uygulamalar açısından ikisi büyük ölçüde aynı şekilde kullanılır; aşağıdaki ayarlar ikisi için de geçerlidir.
Güvenlik: En önemli kısım
Şifresiz ve internete açık Redis sunucuları, sunucuların ele geçirilmesinin bilinen ve otomatik olarak istismar edilen yollarından biridir. Kurulumdan hemen sonra /etc/redis/redis.conf (bazı dağıtımlarda /etc/redis.conf) dosyasında şunları kontrol edin:
1. Yalnızca yerel adreste dinlesin:
bind 127.0.0.1 -::1
protected-mode yes
Redis ile uygulama aynı sunucudaysa, Redis'in dışarıya açık olmasına hiçbir sebep yoktur. Daha da iyisi, TCP yerine bir Unix soketi kullanmaktır:
port 0
unixsocket /run/redis/redis.sock
unixsocketperm 770
2. Şifre ya da ACL tanımlayın:
requirepass cok-uzun-ve-rastgele-bir-sifre
Redis 6 ve sonrası, farklı uygulamalara farklı yetkiler veren kullanıcı tabanlı erişim listelerini (ACL) de destekler.
3. Güvenlik duvarında 6379 portunu kapalı tutun. Birden fazla sunucu Redis'e erişecekse, yalnızca o sunucuların IP adreslerine izin verin ya da bağlantıyı bir VPN üzerinden kurun.
Bellek sınırı ve tahliye politikası
Redis bellekte çalıştığı için, sınır konmazsa sunucunun bütün belleğini tüketebilir. Önbellek olarak kullanıyorsanız mutlaka bir sınır ve tahliye politikası belirleyin:
maxmemory 256mb
maxmemory-policy allkeys-lru
allkeys-lru, bellek dolduğunda en uzun süredir kullanılmayan anahtarları silerek yer açar. Saf bir önbellek için en uygun politikadır. Redis'i aynı zamanda kuyruk ya da kalıcı veri için kullanıyorsanız, o verilerin silinmemesi için volatile-lru gibi yalnızca süresi tanımlanmış anahtarları silen bir politika seçin ya da ayrı bir Redis örneği kullanın.
WordPress'te nesne önbelleği
WordPress'in kendi içinde bir nesne önbelleği vardır, ama varsayılan olarak kalıcı değildir: Yalnızca tek bir sayfa yüklemesi boyunca bellekte tutulur ve istek bitince kaybolur. Bir sonraki ziyarette aynı ayarlar, menüler ve sorgu sonuçları veritabanından tekrar okunur.
Redis ile bu önbellek kalıcı hâle gelir. Kurulum:
- Sunucuda PHP'nin Redis eklentisini kurun (
php-redisya da PECL ileredis). - Redis Object Cache gibi bir eklenti kurun.
wp-config.phpdosyasına bağlantı bilgilerini ekleyin:
define( 'WP_REDIS_HOST', '127.0.0.1' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_REDIS_PASSWORD', 'cok-uzun-ve-rastgele-bir-sifre' );
define( 'WP_REDIS_PREFIX', 'site1:' );
define( 'WP_REDIS_DATABASE', 0 );
- Eklentinin ayarlar sayfasından önbelleği etkinleştirin. Ya da WP-CLI ile:
wp redis enable
wp redis status
WP_REDIS_PREFIX satırına dikkat edin. Aynı Redis sunucusunu birden fazla WordPress sitesi kullanıyorsa, her siteye farklı bir önek verin. Aksi hâlde sitelerin önbellekleri birbirine karışır ve bir sitede başka bir sitenin menüsü görünebilir.
Fark ne kadar olur?
Bu, sitenin yapısına bağlıdır:
- Sayfa önbelleği olan basit bir blogda ziyaretçilerin çoğu zaten önbellekten statik HTML alır. Redis'in etkisi en çok yönetim panelinde ve önbelleğe alınmayan sayfalarda hissedilir.
- WooCommerce mağazaları, üyelik siteleri ve forumlar gibi sayfa önbelleğinin sınırlı kullanılabildiği dinamik sitelerde fark çok belirgin olabilir. Sayfa başına veritabanı sorgu sayısı ciddi şekilde düşer.
Ölçmek için önce ve sonra Query Monitor eklentisiyle sayfa başına sorgu sayısına ve sayfa oluşturma süresine bakın.
Sorun giderme
redis-cli -a 'sifre' info stats | grep -E "keyspace_hits|keyspace_misses"
redis-cli -a 'sifre' info memory | grep used_memory_human
İsabet (hit) oranı yüksekse önbellek işini yapıyor demektir. Bir şey ters gittiğinde, örneğin bir ayar değiştiği hâlde eski değer görünüyorsa, önbelleği temizlemek çoğu zaman çözer:
wp cache flush
Redis'i doğru ayarlamak yarım saat sürer: yerel adreste dinlesin, şifresi olsun, bellek sınırı konsun. Bu üç adım atıldığında, sunucunuzdaki en hızlı ve en sorunsuz bileşenlerden biri olur.
Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.