Modern web uygulamaları, kullanıcıların sabrının çok kısa olduğu bir dünyada çalışıyor. Bir sayfa birkaç saniyede açılmazsa ziyaretçi çoktan başka bir siteye geçmiş oluyor. İşte bu hız yarışında Redis, geliştiricilerin en sık başvurduğu araçlardan biri. Adını "Remote Dictionary Server" ifadesinden alan Redis, veriyi disk yerine doğrudan bellekte tuttuğu için olağanüstü hızlıdır ve saniyede yüz binlerce işlemi rahatça karşılayabilir.
Bu rehberde Redis'in ne olduğunu, neden bu kadar hızlı çalıştığını, hangi senaryolarda hayat kurtardığını ve bir Ubuntu sunucusuna nasıl kurulup kullanılacağını adım adım ele alıyoruz. WordPress sitenizi Redis ile nasıl hızlandırabileceğinizi, Memcached ile arasındaki farkları ve üretim ortamında dikkat etmeniz gereken güvenlik önlemlerini de gerçek komutlarla göstereceğiz. Amacımız, Redis'i sadece "duyduğunuz bir teknoloji" olmaktan çıkarıp, kendi projelerinizde güvenle kullanabileceğiniz bir araca dönüştürmek.
Redis Nedir ve Nasıl Çalışır#
Redis, açık kaynaklı bir bellek içi (in-memory) anahtar-değer veritabanıdır. Geleneksel bir veritabanı verileri sabit diske yazarken, Redis verileri sunucunun RAM'inde tutar. Her verinin bir "anahtarı" (key) ve o anahtara karşılık gelen bir "değeri" (value) vardır; tıpkı bir sözlükte bir kelimeye karşılık bir tanım bulunması gibi. Bir değere ulaşmak istediğinizde anahtarını verir, karşılığında değeri anında alırsınız.
Bu yapı Redis'i inanılmaz basit ve hızlı kılar. Bir MySQL sorgusu çeşitli tabloları tarayıp diskten okuma yaparken, Redis doğrudan bellekteki bir adrese gider ve veriyi getirir. Bu nedenle Redis genellikle ana veritabanının yanında, onun yükünü hafifleten bir hızlandırıcı katman olarak konumlandırılır. İlişkisel bir veritabanının nasıl çalıştığını MySQL veritabanı yönetimi rehberimizde bulabilirsiniz; Redis onun yerini almaz, onu tamamlar.
Redis'in bir başka güçlü yanı, sadece basit metin değil çeşitli veri yapılarını da desteklemesidir. Bir anahtarın değeri sıradan bir metin olabileceği gibi, bir liste, bir küme ya da bir hash tablosu da olabilir. Bu esneklik, Redis'i basit bir önbellekten çok daha fazlası, adeta bir "veri yapıları sunucusu" haline getirir.
Redis Ne İşe Yarar – Başlıca Kullanım Alanları#
Redis'in en yaygın kullanım alanı önbelleklemedir (caching). Sık istenen ama nadiren değişen verileri Redis'te saklarsanız, uygulamanız her seferinde ağır bir veritabanı sorgusu çalıştırmak yerine sonucu doğrudan bellekten okur. Örneğin bir e-ticaret sitesinin ana sayfasındaki ürün listesini Redis'e koyar, her ziyaretçide veritabanını yormak yerine hazır sonucu sunarsınız.
İkinci önemli kullanım alanı oturum (session) deposudur. Birden fazla sunucu arasında yük dengelenen sistemlerde, kullanıcının oturum bilgisini tek bir sunucunun belleğinde tutamazsınız; çünkü sonraki istek başka bir sunucuya gidebilir. Redis, tüm sunucuların ortak eriştiği merkezi bir oturum deposu görevi görür. Kullanıcı hangi sunucuya düşerse düşsün, oturumu Redis'ten okunur.
Redis ayrıca şu senaryolarda da sıkça kullanılır:
- Kuyruk (queue) yönetimi – Arka planda işlenecek görevleri (e-posta gönderimi, resim işleme gibi) bir listeye ekler, işçi süreçler bunları sırayla alıp işler.
- Hız sınırlama (rate limiting) – Bir kullanıcının belirli sürede kaç istek yaptığını Redis sayaçlarıyla takip eder, kötüye kullanımı engellersiniz.
- Gerçek zamanlı sayaçlar – Bir videonun izlenme sayısı, canlı bir oylama ya da anlık çevrim içi kullanıcı sayısı gibi hızla değişen değerleri tutmak için idealdir.
- Lider tabloları (leaderboard) – Sıralı küme veri tipi sayesinde oyunlarda puan tablolarını anında hesaplar ve sıralar.
Bütün bu senaryoların ortak noktası, verinin hızlı okunup yazılması gerektiği ve az bir gecikmenin bile kullanıcı deneyimini bozduğu durumlardır.
Redis Neden Bu Kadar Hızlı#
Redis'in hızının iki temel nedeni vardır. Birincisi, verileri diskte değil RAM'de tutmasıdır. RAM'e erişim, sabit diske erişimden binlerce kat daha hızlıdır; en hızlı SSD'ler bile RAM'in yanına yaklaşamaz. Bir veriyi diskten okumak milisaniyeler alırken, RAM'den okumak mikrosaniyeler mertebesindedir. Bu fark, yoğun trafik altında dramatik bir performans avantajına dönüşür.
İkinci neden, Redis'in temelde tek iş parçacıklı (single-threaded) bir mimariye sahip olmasıdır. İlk bakışta bu bir dezavantaj gibi görünse de aslında Redis'i son derece verimli kılar. Tek iş parçacığı olduğu için karmaşık kilitleme (locking) mekanizmalarına, iş parçacıkları arası eşgüdüm maliyetlerine ihtiyaç duymaz. Komutlar sıraya girer ve teker teker, çok hızlı biçimde işlenir. Modern Redis sürümleri ağ ve bazı arka plan işleri için birden çok iş parçacığı kullansa da, komut işleme mantığı hâlâ bu basit ve öngörülebilir modele dayanır.
Bu iki özelliğin birleşimi, mütevazı bir sunucuda bile saniyede yüz binlerce işlemin karşılanabilmesini sağlar. Redis'in gecikme süresi tipik olarak bir milisaniyenin altındadır; bu da onu gerçek zamanlı uygulamalar için ideal kılar.
Redis Veri Tipleri ve Kalıcılık#
Redis'i basit bir anahtar-değer deposundan ayıran şey, zengin veri tipleridir. En sık kullanılan tipler şunlardır:
| Veri tipi | Açıklama | Örnek kullanım |
|---|---|---|
| String | Basit metin ya da sayı | Önbelleklenmiş HTML, sayaç |
| Hash | Alan-değer çiftlerinden oluşan nesne | Kullanıcı profili (ad, e-posta) |
| List | Sıralı öğe listesi | İş kuyruğu, son etkinlikler |
| Set | Tekrarsız öğe kümesi | Etiketler, benzersiz ziyaretçiler |
| Sorted Set | Puana göre sıralı küme | Lider tablosu, öncelik kuyruğu |
Bu tipler sayesinde Redis'te sadece veri saklamakla kalmaz, veriyi doğal yapısıyla işlersiniz. Örneğin bir sıralı kümeye puanlarıyla birlikte oyuncular ekler, tek bir komutla en yüksek puanlı ilk on oyuncuyu alırsınız.
Redis her ne kadar bellekte çalışsa da, verilerin sunucu yeniden başladığında kaybolmaması için diske kaydetme (persistence) seçenekleri sunar. İki temel yöntem vardır. RDB (Redis Database) anlık görüntü yöntemidir; belirli aralıklarla bellekteki tüm verinin bir fotoğrafını diske yazar. Daha az disk yükü getirir ama iki anlık görüntü arasındaki veriler bir çökmede kaybolabilir. AOF (Append Only File) ise her yazma işlemini bir günlük dosyasına ekler; çok daha dayanıklıdır ama biraz daha fazla disk kullanır. Üretim ortamında sıklıkla ikisi birlikte kullanılır: hızlı yeniden başlatma için RDB, veri güvenliği için AOF.
Ubuntu'da Redis Kurulumu ve Temel Komutlar#
Redis'i bir Ubuntu sunucusuna kurmak oldukça kolaydır. Öncelikle paket listenizi güncelleyip Redis sunucusunu kurun:
sudo apt update
sudo apt install redis-server -y
Kurulum tamamlandığında Redis servisi otomatik olarak başlar. Servisin durumunu ve sunucu yeniden başladığında otomatik başlaması için etkin olup olmadığını kontrol edin:
sudo systemctl status redis-server
sudo systemctl enable redis-server
Redis'in çalışıp çalışmadığını test etmenin en hızlı yolu, komut satırı istemcisi redis-cli üzerinden bir ping göndermektir:
redis-cli ping
# Yanıt: PONG
PONG yanıtını aldıysanız Redis hazırdır. Şimdi redis-cli ile bağlanıp temel komutları deneyelim. Bir değer saklamak için SET, okumak için GET kullanılır:
redis-cli
127.0.0.1:6379> SET site "Clou.TR"
OK
127.0.0.1:6379> GET site
"Clou.TR"
Redis'in en güçlü özelliklerinden biri, anahtarlara son kullanma süresi tanımlayabilmenizdir. Bu, önbellekleme için hayati önem taşır çünkü eski verilerin kendiliğinden silinmesini sağlar:
127.0.0.1:6379> SET oturum "abc123" EX 3600
OK
127.0.0.1:6379> TTL oturum
(integer) 3600
127.0.0.1:6379> EXPIRE oturum 60
(integer) 1
Burada EX 3600 anahtarın 3600 saniye (bir saat) sonra otomatik silineceğini belirtir. TTL komutu bir anahtarın kaç saniye ömrü kaldığını gösterir, EXPIRE ise mevcut bir anahtara yeni bir süre atar. Sayaç işlemleri için INCR komutu vardır; bir anahtarın değerini atomik olarak bir artırır:
127.0.0.1:6379> SET ziyaret 0
OK
127.0.0.1:6379> INCR ziyaret
(integer) 1
127.0.0.1:6379> INCR ziyaret
(integer) 2
Bu INCR komutu, aynı anda gelen isteklerde bile sayaç değerinin bozulmamasını garanti eder; bu yüzden gerçek zamanlı sayaçlar ve hız sınırlama için mükemmeldir.
WordPress'te Redis ile Nesne Önbellekleme#
Redis'in en somut faydalarından birini WordPress'te görürsünüz. WordPress her sayfa yüklemesinde veritabanına onlarca, bazen yüzlerce sorgu gönderir. Aynı sorguların sonuçlarını Redis'te önbelleğe alırsanız, bu tekrar eden veritabanı çağrılarının büyük kısmı ortadan kalkar ve sayfa çok daha hızlı açılır. Buna "kalıcı nesne önbelleği" (persistent object cache) denir.
Bunun için önce sunucuda Redis'in kurulu olması, ardından PHP'nin Redis eklentisinin yüklenmesi gerekir:
sudo apt install php-redis -y
sudo systemctl restart php8.2-fpm
Sonrasında WordPress yönetim panelinden Redis Object Cache gibi bir eklentiyi kurup etkinleştirmeniz yeterlidir. Eklenti, WordPress'in nesne önbelleğini Redis'e yönlendirir. Doğru yapılandırıldığında, panelde "önbellek bağlı" (connected) durumunu görürsünüz. Bu değişikliğin etkisi özellikle WooCommerce gibi veritabanı yoğun eklentiler kullanan sitelerde çok belirgindir; sayfa yanıt süresi genellikle gözle görülür biçimde düşer.
Redis'in aktif olarak veri önbelleğe alıp almadığını redis-cli üzerinden izleyebilirsiniz:
redis-cli info stats | grep keyspace
WordPress hızlandırma stratejilerinin tamamına, önbellek türlerinden görsel optimizasyonuna kadar WordPress hız optimizasyonu rehberimizde ayrıntılı olarak değiniyoruz. Redis, o rehberde anlatılan sayfa önbelleğini tamamlayan güçlü bir nesne önbelleği katmanı sunar. İkisini birlikte kullandığınızda site hızınızda dikkat çekici bir iyileşme elde edersiniz.
Redis mi Memcached mi ve Güvenlik Önlemleri#
Redis'ten söz edilince akla gelen bir başka önbellek sistemi de Memcached'dir. İkisi de bellek içi veri saklar ve önbellekleme için kullanılır, ancak önemli farkları vardır. Memcached son derece basittir; sadece anahtar-değer metin saklar ve tek amacı hızlı önbelleklemedir. Redis ise çok daha yeteneklidir: zengin veri tipleri, disk kalıcılığı, çoğaltma (replication) ve yayın-abonelik gibi özellikler sunar.
| Özellik | Redis | Memcached |
|---|---|---|
| Veri tipleri | Zengin (list, set, hash…) | Sadece string |
| Disk kalıcılığı | Var (RDB/AOF) | Yok |
| Çoğaltma | Var | Yok |
| Kullanım alanı | Önbellek + veri deposu | Sadece basit önbellek |
Pratikte çoğu proje için Redis daha esnek ve geleceğe dönük bir tercihtir. Memcached çok basit, salt önbellekleme senaryolarında hâlâ kullanılsa da, Redis'in sunduğu ek yetenekler onu genellikle daha cazip kılar.
Redis kullanırken güvenlik konusuna mutlaka dikkat etmelisiniz. Öntanımlı olarak Redis'in kimlik doğrulaması yoktur ve yanlış yapılandırılırsa internete açık kalabilir; bu, saldırganların verilerinize erişmesine yol açan ciddi bir güvenlik açığıdır. İlk kural, Redis'i yalnızca yerel makineye bağlamaktır. /etc/redis/redis.conf dosyasında bind ayarının yerel adrese işaret ettiğinden emin olun:
bind 127.0.0.1 ::1
İkinci kural, bir parola belirlemektir. Aynı yapılandırma dosyasında requirepass satırını güçlü bir parola ile ayarlayın:
requirepass "cok-guclu-bir-parola-buraya"
Üçüncü kural, Redis'in dinlediği 6379 portunu güvenlik duvarınızda dışarıya kapatmaktır. Redis'e yalnızca aynı sunucudaki uygulamalar erişmeli, dış dünya asla doğrudan bağlanamamalıdır. Bu üç önlem (yerel bağlanma, parola ve kapalı port) çoğu güvenlik riskini ortadan kaldırır. Ayarları değiştirdikten sonra Redis'i yeniden başlatmayı unutmayın:
sudo systemctl restart redis-server
Sıkça Sorulan Sorular#
Redis bir veritabanının yerini alır mı?#
Genellikle hayır. Redis, MySQL ya da PostgreSQL gibi kalıcı ilişkisel veritabanlarının yerini almaktan çok, onların yükünü hafifleten bir hızlandırıcı katman olarak kullanılır. Ana veriniz kalıcı veritabanında durur, sık erişilen veriler ise Redis'te önbelleğe alınır. Bazı özel senaryolarda Redis birincil veri deposu olarak da kullanılabilir, ancak en yaygın rolü önbellek ve oturum deposudur.
Redis verileri sunucu kapanınca kaybolur mu?#
Redis verileri bellekte tuttuğu için, kalıcılık yapılandırması olmadan sunucu yeniden başladığında veriler kaybolabilir. Ancak Redis, RDB anlık görüntüleri ve AOF günlük dosyası olmak üzere iki kalıcılık seçeneği sunar. Bunları etkinleştirdiğinizde Redis verileri diske yazar ve yeniden başlatmada geri yükler. Önbellek amaçlı kullanımlarda genellikle veri kaybı sorun olmaz, çünkü önbellek kaybolsa bile ana veritabanından yeniden oluşturulur.
Redis kurmak için ne kadar RAM gerekir?#
Bu tamamen sakladığınız veri miktarına bağlıdır çünkü Redis tüm verisini bellekte tutar. Küçük bir WordPress sitesinin nesne önbelleği için birkaç yüz megabayt yeterli olabilirken, büyük ve yoğun bir uygulamada gigabaytlarca RAM gerekebilir. Redis'in maxmemory ayarıyla kullanabileceği bellek üst sınırını belirleyebilir, sınıra ulaşıldığında eski anahtarların otomatik silinmesini sağlayabilirsiniz.
WordPress sitemi Redis gerçekten hızlandırır mı?#
Evet, özellikle veritabanı yoğun sitelerde belirgin bir hızlanma sağlar. WordPress her sayfa yüklemesinde çok sayıda veritabanı sorgusu çalıştırır; Redis nesne önbelleği bu sorguların sonuçlarını bellekte tutarak tekrarlanan çağrıları ortadan kaldırır. WooCommerce mağazaları ya da yüksek trafikli bloglarda sayfa yanıt süresi gözle görülür biçimde düşer. Statik sayfa önbelleği ile birlikte kullanıldığında etki daha da artar.
Redis'i güvenli hale getirmek için ne yapmalıyım?#
En önemli üç adım şunlardır. Birincisi, Redis'i yalnızca yerel adrese bağlayın (bind 127.0.0.1) ki dışarıdan erişilemesin. İkincisi, requirepass ile güçlü bir parola belirleyin. Üçüncüsü, 6379 portunu güvenlik duvarında dışarıya kapatın. Bu önlemler, yanlış yapılandırılmış Redis sunucularının en sık karşılaştığı güvenlik açıklarını kapatır.
Redis ile Memcached arasındaki fark nedir?#
İkisi de bellek içi önbellek sistemidir, ancak Redis çok daha yeteneklidir. Memcached yalnızca basit anahtar-değer metin saklar ve tek amacı hızlı önbelleklemedir. Redis ise liste, küme, hash gibi zengin veri tiplerini, disk kalıcılığını ve çoğaltmayı destekler. Bu nedenle çoğu modern proje için Redis daha esnek ve geleceğe dönük bir tercihtir; Memcached ise çok basit senaryolarda hâlâ yeterli olabilir.
Kapanış#
Redis, modern web uygulamalarının hız ihtiyacına doğrudan yanıt veren, öğrenmesi kolay ama son derece güçlü bir araçtır. Önbellekleme, oturum yönetimi, kuyruklar ve gerçek zamanlı sayaçlar gibi pek çok senaryoda uygulamanızı hem hızlandırır hem de ana veritabanınızın yükünü azaltır. Kurulumu birkaç komuttan ibarettir ve doğru güvenlik ayarlarıyla üretim ortamında güvenle çalışır.
Redis çalıştırabileceğiniz tam kök erişimli, performanslı bir altyapıya ihtiyaç duyarsanız Clou.TR'nin VDS sunucuları ve geniş sunucu çözümleri tam size göre. WordPress sitenizi Redis destekli bir altyapıda hızlandırmak isterseniz WordPress hosting paketlerimize, kurulum ve yönetimi bize bırakmak isterseniz sunucu yönetimi hizmetimize göz atabilirsiniz.