asyncfunctionrenderPage(){const data =awaitgetPageDatas();return data;}
Bileşenler hazırlanıyor...
Not içeriği yükleniyor...
// Markdown dosyası okunuyor
// İçerik işleniyor
// Syntax highlighting hazırlanıyor
Redis Nedir? | In-Memory Data Store Rehberi | Kubilay Bozak
Redis Nedir ?
2025-07-11
12 min
Redis in-memory data structure store özellikleri, use cases ve architecture. Cache, session store ve real-time analytics için kullanım senaryoları.
Redis
Cache
Database
NoSQL
In-Memory
Modern yazılım geliştirme süreçlerinde performans optimizasyonu, ölçeklenebilirlik ve kullanıcı deneyimi açısından Redis gibi cache teknolojileri kritik bir rol oynamaktadır. Bu yazıda Redis'in yazılım projelerine sağladığı faydaları, alternatif çözümlerle karşılaştırmasını ve neden tercih edildiğini detaylı olarak inceleyeceğiz. Öncelikle cache kavramının temellerini anlayarak başlayalım.
Caching nedir ?
Yazılım geliştirme süreçlerinde caching, sık erişilen verilerin geçici olarak bellekte (RAM) saklanması işlemidir. Bu yaklaşımın temel amacı, veriye erişim süresini minimize ederek uygulama performansını artırmaktır. Çünkü RAM, geleneksel disk tabanlı depolama çözümlerine (HDD/SSD) kıyasla çok daha yüksek veri okuma ve yazma hızlarına sahiptir. Bu sayede veritabanı sorgularının veya dış servis çağrılarının tekrar tekrar çalıştırılmasına gerek kalmadan, hızlı ve verimli veri erişimi sağlanabilir.
Cache sisteminin yazılıma katkıları nedir ?
🚀Performans Artışı
Verilere RAM üzerinden erişildiği için yanıt süreleri önemli ölçüde azalır.
Özellikle yoğun okuma yapılan (read-heavy) sistemlerde ciddi hız kazancı sağlanır.
📉 Veritabanı Yükünü Azaltma
Aynı veriye tekrar tekrar erişilmesi gerektiğinde, veritabanına sürekli sorgu göndermek yerine cache kullanılarak sistem üzerindeki yük azaltılır.
Bu da hem maliyeti düşürür hem de veritabanının diğer işlemlere daha fazla kaynak ayırmasını sağlar.
🔄 Tekrarlayan Hesaplamaların Önlenmesi
Karmaşık hesaplamalar veya pahalı API çağrıları sonucu elde edilen veriler cache’te tutulur ve tekrar hesaplanması gerekmez.
Örneğin, filtreleme, sıralama, analiz sonuçları gibi işlemler cache ile hızlandırılabilir.
📈 Yüksek Ölçeklenebilirlik
Cache, sistemin daha fazla kullanıcıya aynı anda hizmet verebilmesine olanak tanır.
Özellikle trafiği yoğun uygulamalarda (e-ticaret, sosyal medya, içerik platformları) sistemin çökmesini önler.
🌐 Kritik Verilere Hızlı Erişim
Sık kullanılan ürün listeleri, kullanıcı profilleri, ayarlar gibi verilere anlık erişim sağlar.
Kullanıcı deneyimini iyileştirir, özellikle mobil uygulamalarda ve gerçek zamanlı sistemlerde önemli fark yaratır.
🧠 Offline / Failover Destek
Cache, bazı durumlarda sistemin tamamı ayakta olmasa bile temel bilgileri servis etmeye devam edebilir.
Bu sayede sistemin kısmen de olsa çalışabilirliği korunur.
🔐 Session Management / Authentication
Kullanıcı oturum bilgileri ve tokenlar gibi kimlik doğrulama verileri cache'te saklanarak hızlı doğrulama yapılabilir.
Cache sistemlerinin faydalarını anladıktan sonra, hangi tür verilerin cache'lenmeye uygun olduğunu belirlemek önemlidir. Doğru veri seçimi, cache'in maksimum verimlilikle çalışmasını sağlar.
Ne tarz veriler Cachlenir ?
Cache sistemleri, özellikle sık erişilen, değişme sıklığı düşük ve hesaplaması/veritabanı erişimi maliyetli olan veriler için idealdir. Aşağıda yaygın olarak cache'lenen veri türlerini bulabilirsin:
🧾 Sık Kullanılan Sabit Veriler (Lookup / Static Data)
Ülke listesi, para birimleri, kategoriler, sabit menüler gibi nadiren değişen veriler.
Örnek: GET /countries → DB yerine doğrudan cache’ten döner.
🛒 Ürün / İçerik Listeleri
Anasayfa ürünleri, popüler içerikler, önerilen videolar gibi çok sayıda kullanıcının sık eriştiği listeler.
Özellikle e-ticaret ve medya uygulamalarında kullanılır.
Örnek: Anasayfada en çok satan 10 ürün → popular-products cache key’i ile saklanabilir.
🧑💼 Kullanıcı Oturum ve Profil Bilgileri
Kimliği doğrulanmış kullanıcı bilgileri, yetkileri veya ayarları gibi hızlı erişilmesi gereken veriler.
Örnek: user:12345:profile → kullanıcı profil bilgisi.
🔒 Token / Yetkilendirme Verileri
JWT token’lar, refresh token’lar ya da geçici doğrulama kodları (OTP).
Kullanıcı doğrulama işlemlerinde güvenli ve hızlı işlem için kullanılır.
📊 Rapor ve Analiz Sonuçları
Yüksek maliyetli istatistiksel raporlar, grafik verileri veya filtrelenmiş sonuçlar.
Yeniden hesaplamaya gerek kalmadan hızlıca sunulabilir.
Örnek: “Son 24 saatteki sipariş sayısı”.
🔄 Dış Servis (API) Cevapları
Üçüncü parti API'lere yapılan pahalı veya sınırlı çağrıların sonuçları.
Yanıt süresi uzun olan servisler için hayati önem taşır.
Örnek: Döviz kuru bilgileri (currency:usd-try).
🧮 Sık Tekrarlanan Hesaplama Sonuçları
Puan hesaplamaları, dinamik kampanya fiyatları gibi her kullanıcıda değişmeyen ama hesaplama gerektiren veriler.
🧰 Sayfa / Komponent Seviyesi Cache’leme
HTML parçacıkları, layout bileşenleri veya önbelleğe alınabilir API response’ları.
Frontend performansı için kritik.
🔁 ⚠️ Ne Zaman Cache Yapmamalı? Cache Sisteminin Olası Zararları ve Dezavantajları
🧩 Veri Tutarsızlığı (Cache Inconsistency)
Cache’teki veri ile ana veri kaynağı (örneğin veritabanı) arasındaki senkronizasyon problemi oluşabilir.
Güncel olmayan verinin kullanıcıya gösterilmesi hatalara yol açabilir.
Cache invalidation (önbelleğin temizlenmesi/güncellenmesi) zor ve karmaşık olabilir.
🔄 Cache Invalidation Zorluğu
Verinin güncellendiği durumlarda cache’i doğru şekilde temizlemek veya güncellemek gereklidir.
Yanlış yönetilen invalidation, performans kaybına veya yanlış veri sunumuna neden olabilir.
💾 Bellek Tüketimi ve Yönetimi
Cache sistemleri RAM kullandığı için sınırlı belleği hızlı tüketebilir.
Bellek dolduğunda eski verilerin atılması (eviction) stratejileri doğru seçilmezse önemli veriler silinebilir.
🚦 Ekstra Karmaşıklık ve Bakım Maliyeti
Cache entegrasyonu sistem mimarisini karmaşıklaştırır.
Doğru yapılandırma, izleme ve hata ayıklama süreçleri ek iş yükü yaratır.
🕒 Soğuk Başlangıç Problemi (Cache Warm-up)
Cache ilk açıldığında boş olduğundan performans avantajı hemen sağlanamaz.
İlk isteklerde veritabanına direkt sorgu gönderilir, bu da yüklenme sürecini yavaşlatabilir.
🔐 Güvenlik Riskleri
Yanlış yapılandırılmış cache, hassas verilerin yetkisiz erişimine açık hale getirebilir.
Özellikle paylaşılan cache ortamlarında veri izolasyonuna dikkat etmek gerekir.
🐞 Hatalı Cache Kullanımı
Cache anahtarlarının doğru tasarlanmaması veya sürelerinin yanlış belirlenmesi sorun yaratabilir.
Örneğin, çok uzun süreli cache’lenmiş eski veriler kullanılabilir.
Cache sistemleri, performans ve ölçeklenebilirlik açısından önemli avantajlar sağlasa da, beraberinde bazı riskler ve yönetim zorlukları da getirebilir. Bu nedenle, cache kullanımını doğru ve etkin şekilde planlamak için öncelikle cache mekanizmasının temel bileşenlerini iyi anlamak gerekir. Böylece hem performans kazanımları maksimize edilir hem de olası dezavantajların önüne geçilebilir.
Etkili bir cache sistemi kurabilmek için, cache mekanizmasını oluşturan temel bileşenleri detaylı bir şekilde anlamamız gerekmektedir. Bu bileşenler cache sisteminin çekirdeğini oluşturur ve doğru yapılandırılması sistem performansını doğrudan etkiler.
🛠️ Bir Cache Mekanizmasının Temel Bileşenleri
Cache Store (Önbellek Deposu)
Cache verilerinin tutulduğu bellek alanı veya sistemidir.
Genellikle RAM tabanlıdır (örneğin Redis, Memcached).
Yüksek hızlı veri erişimi sağlar.
Cache Key (Önbellek Anahtarı)
Cache içindeki her veriyi benzersiz şekilde tanımlayan anahtar.
Doğru ve anlamlı anahtar tasarımı cache’in etkin çalışması için kritik önemdedir.
Örnek: user:123:profile, product:456:details
Cache Value (Önbellek Değeri)
Anahtara karşılık gelen saklanan veri parçasıdır.
Veri nesnesi, JSON, string, sayısal değer veya kompleks yapı olabilir.
Cache Invalidation (Önbellek Geçersiz Kılma)
Cache’teki verinin güncelliğini yitirdiğinde temizlenmesi veya yenilenmesi süreci.
Otomatik süre aşımı (TTL), manuel temizleme veya veri değişim tetikleyicileri ile yapılabilir.
Cache dolduğunda hangi verilerin silineceğine karar veren strateji.
Örnekler: LRU (Least Recently Used), LFU (Least Frequently Used), FIFO (First In First Out).
Cache Loader / Fetcher
Cache’te veri yoksa (cache miss) veriyi ana kaynaktan (örneğin veritabanı) alıp cache’e yükleyen bileşen.
Bu sayede cache’in sürekli güncel ve kullanılabilir kalması sağlanır.
Cache Expiration / TTL (Time To Live)
Önbellekteki verinin geçerlilik süresi.
Süre dolunca veri otomatik olarak silinir veya yenilenir.
Cache Client / API
Cache sistemine erişimi sağlayan arayüz.
Uygulamanın cache işlemlerini gerçekleştirmesini sağlar (get, set, delete).
Yazılım mimarilerinde cache kullanımı, farklı ihtiyaçlara ve ölçeklenebilirlik gereksinimlerine bağlı olarak çeşitli yaklaşımlar ile hayata geçirilebilir. Temelde iki yaygın cache yaklaşımı bulunur: In-Memory Cache ve Distributed Cache. Her iki yöntem de performansı artırmayı hedefler, ancak kullanım senaryoları ve mimari ihtiyaçları doğrultusunda farklı avantajlar ve sınırlamalar sunar.
Caching Yaklaşımları nedir ?
In-Memory Cache
In-Memory cache, uygulama sunucusunun kendi belleğinde (RAM) tutulan önbellek türüdür. Bu yaklaşım, veri erişimini en hızlı şekilde sağlar çünkü veriler doğrudan uygulamanın çalışma ortamında saklanır. Küçük ve orta ölçekli uygulamalar veya tek sunucu ortamları için idealdir. Dezavantajı ise, cache verisinin uygulama kapandığında veya yeniden başlatıldığında kaybolması ve çoklu sunucu ortamlarında veri tutarsızlığı yaşanabilmesidir.
Distributed Cache
Distributed Cache ise önbellek verilerinin birden fazla sunucuya dağıtılarak saklandığı, merkezi veya kümelenmiş (clustered) cache sistemleridir. Bu yaklaşım, büyük ölçekli, yatayda ölçeklenen ve yüksek erişilebilirlik gerektiren uygulamalarda tercih edilir. Redis veya Memcached gibi çözümler bu kategoridedir. Distributed cache, cache verisinin farklı sunucular arasında senkronize edilmesini sağlar, böylece uygulama sunucuları arasında tutarlılık ve yüksek erişilebilirlik sağlanır. Dezavantajı ise network gecikmeleri ve yapılandırma karmaşıklığıdır.
Distributed cache mimarileri, yüksek trafikli ve ölçeklenebilir sistemlerde yaygın olarak tercih edilir. Bu yaklaşım sayesinde birden fazla uygulama sunucusu, merkezi bir önbellek katmanını paylaşabilir ve tutarlı veri erişimi sağlanabilir. Günümüzde dağıtık önbellekleme için kullanılan popüler çözümler arasında Redis, Memcached, Apache Ignite ve Hazelcast gibi teknolojiler öne çıkar. Bu sistemler, hem performans hem de esneklik açısından güçlü özellikler sunar.
Özellikle Redis, sunduğu zengin veri yapıları, yüksek performansı ve aktif topluluk desteği ile en çok tercih edilen distributed cache çözümüdür. Redis'in teorik altyapısını kavradığımıza göre, artık pratik uygulamaya geçerek Redis kurulum sürecini ve temel kullanımını inceleyebiliriz.
🚀 Docker ile Redis Kurulumu
Docker kullanıyorsan Redis’i çalıştırmak yalnızca tek bir komutla mümkün:
markdown
## Docker çalıştırmak için gerekli koddocker run --name redis-server -p 1453:6379 -d redis
## Docker bilmiyorsanız local olarak kurulum yapabilirsiniz biz docker üzerinden ilerleyeceğiz.
redis: Docker Hub’daki resmi Redis imajını kullanır
Redis’i bu şekilde başlattıktan sonra terminalden veya herhangi bir Redis istemcisi ile bağlanabiliriz.
image.png
Redis sunucusu Docker üzerinden başarıyla kurulmuş ve temel bağlantı testleri tamamlanmıştır.
text
#Docker container'in içine girip kod çalıştırarak docker'ı test edelim.
docker exec -it 635020ed5c00 redis-cli
ping "merhaba redis sunucusu içerisindeyim test ediyorum"
"merhaba redis sunucusu i\xc3\xa7erisindeyim test ediyorum"
Redis sunucusu başarıyla kurulduktan sonra, sistemin daha verimli kullanılabilmesi ve görsel olarak izlenebilmesi için bir yönetim aracı kullanmak oldukça faydalıdır. Bu noktada devreye Redis Insight girer. Özellikle uygulama geliştiriciler ve sistem yöneticileri için Redis’i anlık olarak takip etmek, veri yapısını görmek ve performans analizi yapmak çok daha kolay hale gelir. Şimdi Redis Insight’ın ne olduğunu, ne sunduğunu ve nasıl kurulacağını birlikte inceleyelim.
🧠 Redis Insight Nedir?
Redis Insight, Redis Labs tarafından geliştirilen, Redis sunucularını görsel arayüzle yönetmeyi sağlayan bir GUI (Grafiksel Kullanıcı Arayüzü) uygulamasıdır. Hem Redis’in temel veri işlemleri (GET, SET, DEL vb.) hem de gelişmiş veri yapıları (List, Hash, Sorted Set, Stream, Geo) görsel olarak yönetilebilir.
✅ Redis Insight ile Neler Yapılabilir?
Bağlı Redis instance’larını görüntüleme ve yönetme
Key/value verileri görsel olarak düzenleme
TTL (Time-To-Live) sürelerini izleme
Memory kullanımı ve performans analizi
Query geçmişi ve key taraması
Stream, Pub/Sub, Slowlog gibi gelişmiş Redis özelliklerini izleme
Redis Insight, Windows, macOS ve Linux için masaüstü uygulama olarak kullanılabilir.
İşletim sistemine uygun installer’ı indirip kurulum adımlarını tamamla.
Uygulamayı başlat ve Add Redis Database butonuna tıklayarak Redis sunucuna bağlantı bilgilerini gir:
Host: localhost
Port: 1453
Bağlantı sağlandıktan sonra tüm Redis verilerini görsel olarak yönetebilirsin.
image.png
Redis Insight aracılığıyla Redis sunucusuna başarıyla bağlantı kurulmuş ve temel yapılandırma tamamlanmıştır. Bu noktadan itibaren Redis'in gelişmiş özelliklerini ve pratik kullanım senaryolarını detaylandıracağız.
Sonuç
Bu yazıda Redis ve cache teknolojilerinin modern yazılım geliştirmedeki kritik rolünü kapsamlı bir şekilde inceledik. Cache sistemlerinin performans, ölçeklenebilirlik ve kullanıcı deneyimi açısından sağladığı faydalardan başlayarak, hangi verilerin cache'lenmesi gerektiği, hangi durumlarda dikkatli olunması gerektiği ve cache mekanizmasının temel bileşenlerini ele aldık.
Redis'in distributed cache çözümü olarak öne çıkan özellikleri ve Docker kullanarak hızlı kurulum süreci ile birlikte Redis Insight gibi yönetim araçlarının önemi vurgulanmıştır. İlerleyen yazılarda Redis'in veri yapıları, performans optimizasyonları ve gerçek projeler içindeki uygulamaları daha detaylı olarak ele alınacaktır.
Redis, sadece bir key-value store olmanın ötesine geçerek güçlü veri yapıları sunan, yüksek performanslı bir bellek içi veri deposudur. Bu veri yapıları sayesinde hem basit hem de kompleks veri ihtiyaçları etkili bir şekilde yönetilebilir. Doğru veri türünü seçmek, Redis performansını maksimize etmek ve uygulama mimarisini sadeleştirmek açısından büyük önem taşır. Bu yazıda, Redis'in desteklediği temel veri türlerini inceleyecek ve her birinin kullanım senaryolarını örneklerle öğreneceğiz.
Hazırsanız öncelikle genel olarak veri türlerini öğrenelim daha sonra tek tek detaylı bir şekilde veri tiplerini öğrenmeye başlayalım.
📋 Redis Temel Veri Türleri Tablosu
Veri Türü
Açıklama
Örnek Kullanım Senaryosu
String
En basit veri türüdür, metin veya sayı saklamak için kullanılır.
Oturum bilgisi, sayaç, JWT token
List
Sıralı elemanlardan oluşan, çift uçlu kuyruk yapısıdır.
Mesaj kuyrukları, bildirim listesi
Set
Benzersiz (unique) elemanlardan oluşan küme veri yapısıdır.
Etiket listesi, kullanıcı takip sistemi
Sorted Set
Skor bazlı sıralanmış benzersiz elemanlardan oluşur.
Sıralama tabloları, popüler içerik listesi
Hash
Bir key içinde birden fazla alan/değer çiftini saklar.
Kullanıcı profilleri, ürün özellikleri
Bitmap
Bit düzeyinde işlem yapmaya yarar, düşük seviyeli verimlilik sağlar.
Online kullanıcı takibi, A/B test durumu
HyperLogLog
Yaklaşık sayım algoritmasıyla büyük veri kümelerini küçük alanda tutar.
Ziyaretçi sayımı, benzersiz kullanıcı ölçümü
Stream
Gerçek zamanlı veri akışlarını saklamak için kullanılır.
Loglama, mesajlaşma, IoT veri akışı
Geo
Lokasyon verilerini saklamak ve coğrafi sorgular yapmak için kullanılır.
Yakındaki noktaları bulma, harita uygulamaları
Redis’in veri türleri, geleneksel ilişkisel veritabanlarında (SQL, Oracle, PostgreSQL gibi) alışık olduğumuz veri türlerinden oldukça farklıdır. Bu veri yapıları, sadece veri saklamaktan öte, belirli davranışları ve işlemleri doğrudan destekleyen yapılar sunar. Bu yüzden SQL tabanlı sistemlere aşina olanlar için Set, Sorted Set ya da Stream gibi veri türleri başlangıçta yabancı gelebilir. Ancak Python, JavaScript veya benzeri programlama dilleriyle çalışan geliştiriciler bu yapıları veri yapısı açısından daha tanıdık bulabilir.
Şöyle düşünebilirsiniz: “Bizim bu veri türleriyle ne işimiz var? Zaten uygulama kodu üzerinden veriyi set/get yapıyoruz.” Ancak burada yalnızca bir programlama dili ya da framework öğrenmiyoruz; Redis gibi başlı başına bir teknolojiyi ve onun çalışma paradigmasını anlamaya çalışıyoruz. Bu nedenle Redis’in sunduğu veri türlerini, onların nasıl davrandığını ve hangi durumlarda ne tür avantajlar sağladığını bilmek, yalnızca doğru kodu yazmak değil, doğru çözümü tasarlamak açısından da oldukça değerlidir. Konuyu bu bakış açısıyla ele almak, Redis’i ezberlemekten öte, sistemsel düşünmenizi sağlar.
Yukarıdaki tabloda Redis'in temel veri türlerine genel bir bakış attık. Elbette Redis yalnızca bu temel türlerle sınırlı değil; Geo, Stream, Bitmap, HyperLogLog gibi gelişmiş veri türleri de sistem içerisinde yer alıyor. Ancak sağlam bir Redis temeli için öncelikle en yaygın kullanılan beş temel veri türünü detaylı olarak öğrenmek kritik önem taşır.
Artık genel olarak neler öğreneceğimize ve neler üzerinden çalışmalar yapacağımıza değinmiş olduk artık bir sonraki içeriğimizde String veri türüne başlıyor ve detaylı bir şekilde inceliyor olacağız.