IHS Blog

Redis Kurulumu ve Yapılandırması: Yüksek Hızlı Bellek İçi Veritabanı

redis-kurulumu-ve-yapilandirmasi-yuksek-hizli-bellek-ici-veritabani

Modern web uygulamalarının hız ve performans beklentilerini karşılamak için tasarlanmış olan Redis, açık kaynak kodlu, yüksek performanslı bir bellek içi (in-memory) veri yapısı deposudur. Genellikle veritabanı, önbellek ve mesajlaşma aracısı olarak kullanılan Redis, verileri disk yerine ana bellekte (RAM) tutarak milisaniyeler içinde okuma ve yazma işlemlerine olanak tanır. Bu özelliği, onu özellikle gerçek zamanlı uygulamalar, anlık veri analizi, oturum yönetimi ve yüksek trafikli web siteleri için vazgeçilmez bir araç haline getirir. Zengin veri tipi desteği ve esnek veri kalıcılığı mekanizmaları ile Redis, geleneksel veritabanlarının yavaş kaldığı senaryolarda geliştiricilere büyük bir güç ve esneklik sunar.

İçerik Tablosu

Redis’e Giriş ve Temel Kavramlar

Redis, “Remote Dictionary Server” ifadesinin kısaltmasıdır ve temel olarak bir anahtar-değer (key-value) deposu olarak çalışır. Ancak onu diğer anahtar-değer depolarından ayıran en önemli özelliği, sunduğu zengin ve gelişmiş veri tipleridir. Bu bölümde Redis’in ne olduğunu, temel kavramlarını, öne çıkan özelliklerini ve yaygın kullanım alanlarını detaylı bir şekilde inceleyeceğiz.

Redis Nedir? Bellek İçi (In-Memory) Veri Yapısı Deposu Kavramı

Redis, verileri disk tabanlı geleneksel veritabanları gibi sabit disklerde (HDD/SSD) değil, doğrudan sunucunun belleğinde (RAM) saklayan bir veri deposudur. “In-memory” yani “bellek içi” çalışma prensibi, verilere erişim süresini dramatik ölçüde azaltır. Disk G/Ç (Giriş/Çıkış) operasyonlarının getirdiği gecikmeyi ortadan kaldırarak, okuma ve yazma işlemlerini mikrosaniye seviyelerine indirir. Bu, Redis’in neden inanılmaz derecede hızlı olduğunu açıklayan temel mimari karardır. Sadece basit anahtar-değer çiftlerini değil, aynı zamanda listeler, kümeler, sıralı kümeler ve karmalar gibi daha karmaşık veri yapılarını da destekler. Bu sayede geliştiriciler, uygulama mantığını daha verimli bir şekilde doğrudan veri katmanında işleyebilirler.

Redis’in Öne Çıkan Özellikleri ve Avantajları

Redis’in popülerliğinin arkasında yatan birçok güçlü özellik bulunmaktadır. Bu özellikler, onu çeşitli uygulama senaryoları için ideal bir çözüm haline getirir.

Yüksek Hız ve Düşük Gecikme Süresi

Redis’in en bilinen avantajı şüphesiz hızıdır. Verileri RAM’de tutması sayesinde saniyede milyonlarca işlemi gerçekleştirebilir. Bu, özellikle anlık yanıt verilmesi gereken, kullanıcı deneyiminin kritik olduğu uygulamalarda (örneğin, e-ticaret sitelerindeki ürün önerileri, oyun lider tabloları) büyük bir fark yaratır.

Zengin Veri Tipleri Desteği

Redis, basit dizelerden (strings) çok daha fazlasını sunar. Listeler, kümeler (sets), sıralı kümeler (sorted sets), karmalar (hashes), bit eşlemleri (bitmaps) ve coğrafi veriler (geospatial) gibi çeşitli veri tiplerini atomik operasyonlarla destekler. Bu zengin veri tipi yelpazesi, karmaşık problemlerin daha az kodla ve daha verimli bir şekilde çözülmesini sağlar.

Kalıcılık (Persistence) Seçenekleri

Verileri bellekte tutması, Redis’in dayanıksız olduğu anlamına gelmez. Redis, sunucu yeniden başlatıldığında veya bir çökme durumunda verilerin kaybolmasını önlemek için iki farklı kalıcılık mekanizması sunar: RDB (Redis Database) ve AOF (Append Only File). RDB, belirli aralıklarla veritabanının anlık bir görüntüsünü diske kaydederken, AOF her yazma işlemini bir log dosyasına ekler. Bu iki yöntem, ihtiyaca göre tek başlarına veya birlikte kullanılabilir.

Redis’in Yaygın Kullanım Alanları

Redis’in hızı ve esnekliği, onu birçok farklı alanda popüler bir tercih haline getirmiştir.

Önbellekleme (Caching)

En yaygın kullanım senaryosu, veritabanı sorgularının, API çağrılarının veya karmaşık hesaplamaların sonuçlarını önbelleğe almaktır. Sık erişilen verileri Redis’te tutarak, daha yavaş olan birincil veritabanına giden yükü azaltır, uygulama yanıt sürelerini iyileştirir ve genel sistem performansını artırır. Bu, etkili bir önbellek mekanizmasıdır.

Oturum Yönetimi (Session Store)

Web uygulamalarında kullanıcı oturum bilgilerini saklamak için Redis mükemmel bir çözümdür. Yatay olarak ölçeklendirilmiş (load balanced) sistemlerde, kullanıcı talebi hangi sunucuya düşerse düşsün, oturum verilerine hızlıca erişilebilir. Bu, tutarlı ve kesintisiz bir kullanıcı deneyimi sağlar.

Gerçek Zamanlı Analitik ve Sayaçlar

Bir web sitesindeki anlık ziyaretçi sayısını takip etmek, bir sosyal medya gönderisinin beğeni sayısını anlık olarak güncellemek veya bir ürünün stok durumunu yönetmek gibi işlemler için Redis’in atomik artırma/azaltma (INCR/DECR) komutları son derece verimlidir. Bu sayede gerçek zamanlı sayaçlar ve analitik verileri kolayca tutulabilir.

Mesajlaşma Kuyrukları (Message Queues)

Redis’in liste veri tipi, temel mesajlaşma kuyrukları oluşturmak için kullanılabilir. Bir işlem (producer), yapılacak işleri bir listeye eklerken, başka işlemler (consumers) bu kuyruktan işleri alıp işler. Bu, özellikle uzun süren veya kaynak yoğun görevleri uygulamanın ana akışından ayırmak için kullanılan bir yöntemdir.

Lider Tabloları (Leaderboards)

Sıralı kümeler (Sorted Sets) veri tipi, Redis’i oyunlar veya yarışma uygulamaları için ideal bir lider tablosu çözümü yapar. Her üyeye bir skor atanır ve Redis bu üyeleri otomatik olarak skora göre sıralı tutar. Belirli bir kullanıcının sıralamasını veya en yüksek skorlu kullanıcıları getirmek gibi işlemler son derece hızlıdır.

Redis ve Diğer Veritabanları Arasındaki Farklar

Redis’i geleneksel ilişkisel veritabanları (örn. MySQL, PostgreSQL) veya diğer NoSQL veritabanları (örn. MongoDB, Cassandra) ile karşılaştırmak, onun kendine özgü yerini anlamamıza yardımcı olur. Geleneksel veritabanları verileri diskte, yapılandırılmış tablolar halinde saklar ve karmaşık sorgular için tasarlanmıştır. Redis ise hıza odaklanmış, daha basit veri yapılarını bellekte tutan bir sistemdir. Veri tutarlılığı ve karmaşık ilişkiler yerine performansı önceliklendirir. Bu nedenle, Redis genellikle tek başına bir veritabanı olmak yerine, mevcut bir veritabanı sistemini desteklemek ve hızlandırmak için kullanılır.

ÖzellikRedisGeleneksel SQL Veritabanı (örn. MySQL)Document NoSQL Veritabanı (örn. MongoDB)
Veri DepolamaBellek (RAM) öncelikliDisk (HDD/SSD) öncelikliDisk (HDD/SSD) öncelikli
PerformansÇok Yüksek (Düşük Gecikme)Orta/YüksekYüksek
Veri ModeliAnahtar-Değer ve Gelişmiş Veri Yapılarıİlişkisel (Tablolar, Satırlar, Sütunlar)Döküman (JSON/BSON)
SorgulamaBasit komutlar ve anahtar bazlı erişimKarmaşık SQL sorguları, JOIN’lerZengin döküman bazlı sorgulama
Temel Kullanım AlanıÖnbellekleme, Oturum Yönetimi, Gerçek Zamanlı UygulamalarYapılandırılmış veriler, Finansal sistemler, ERPİçerik yönetimi, Mobil uygulamalar, Kataloglar

Kurulum İçin Gerekli Ortamın Hazırlanması

Redis kurulumuna geçmeden önce, üzerinde çalışacağı sistemin doğru şekilde yapılandırıldığından ve gerekli tüm bağımlılıkların yüklendiğinden emin olmak önemlidir. Bu hazırlık aşaması, kurulum sürecinin sorunsuz ve başarılı olmasını sağlayacaktır. Redis, esnek bir yapıya sahip olmasına rağmen, en iyi performansı belirli ortamlarda sunar.

Desteklenen İşletim Sistemleri (Linux, macOS, Windows için WSL)

Redis, resmi olarak POSIX uyumlu sistemler için geliştirilmiş ve test edilmiştir. Bu nedenle en kararlı ve performanslı çalıştığı ortamlar Linux dağıtımlarıdır.

Sistem Gereksinimleri (Bellek ve CPU Önerileri)

Redis’in sistem gereksinimleri, kullanım amacına ve depolanacak veri miktarına göre büyük ölçüde değişiklik gösterir.

Gerekli Derleme Araçlarının Yüklenmesi (gcc, make, tcl)

Redis’i paket yöneticileri yerine doğrudan kaynak kodundan derleyerek kurmayı planlıyorsanız, sisteminizde bazı temel geliştirme araçlarının yüklü olması gerekir. Paket yöneticisi ile yapılan kurulumlarda bu bağımlılıklar genellikle otomatik olarak yüklenir.

Bu araçları Debian/Ubuntu tabanlı sistemlerde `sudo apt-get install build-essential tcl` komutuyla, CentOS/RHEL tabanlı sistemlerde ise `sudo yum groupinstall “Development Tools”` ve `sudo yum install tcl` komutlarıyla yükleyebilirsiniz.

Farklı Platformlar İçin Adım Adım Redis Kurulumu

Redis’i farklı işletim sistemlerine kurmanın birden fazla yolu vardır. Bu bölümde, en yaygın platformlar olan Linux, macOS, Windows (WSL ile) ve Docker için adım adım kurulum talimatlarını bulacaksınız. İhtiyaçlarınıza en uygun yöntemi seçerek kurulumu kolayca tamamlayabilirsiniz.

Linux Dağıtımları Üzerine Kurulum

Linux, Redis için en ideal ve en çok tercih edilen platformdur. Kurulum, dağıtımınızın paket yöneticisi kullanılarak veya doğrudan kaynak koddan derlenerek yapılabilir.

Ubuntu/Debian için Paket Yöneticisi (apt) ile Kurulum

Ubuntu ve Debian tabanlı sistemlerde `apt` paket yöneticisini kullanmak en basit yöntemdir.

  1. Paket listesini güncelleyin:
    sudo apt update
  2. Redis sunucusunu yükleyin:
    sudo apt install redis-server
  3. Kurulumu doğrulayın: Redis servisi genellikle kurulumdan sonra otomatik olarak başlar. Durumunu kontrol etmek için:
    sudo systemctl status redis-server

CentOS/RHEL için Paket Yöneticisi (yum/dnf) ile Kurulum

CentOS, RHEL ve Fedora gibi dağıtımlarda `yum` veya `dnf` paket yöneticisi kullanılır. Bu dağıtımların standart depolarındaki Redis sürümü eski olabilir, bu nedenle genellikle EPEL (Extra Packages for Enterprise Linux) veya Remi deposu gibi ek depoların etkinleştirilmesi önerilir.

  1. EPEL deposunu yükleyin (CentOS 7 için):
    sudo yum install epel-release
  2. Remi deposunu etkinleştirin (isteğe bağlı, daha güncel sürüm için):
    sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
    sudo yum-config-manager --enable remi
  3. Redis’i yükleyin:
    sudo yum install redis
  4. Redis servisini başlatın ve etkinleştirin:
    sudo systemctl start redis
    sudo systemctl enable redis

Kaynak Koddan Derleyerek Kurulum

Her zaman en son Redis sürümünü kullanmak veya özel derleme seçenekleri belirtmek istiyorsanız, kaynak koddan kurulum en esnek yöntemdir.

  1. Gerekli derleme araçlarını yükleyin:
    sudo apt update && sudo apt install build-essential tcl (Debian/Ubuntu için)
    sudo yum groupinstall "Development Tools" && sudo yum install tcl (CentOS/RHEL için)
  2. En son kararlı Redis sürümünü indirin: Redis’in resmi indirme sayfasından en son `tar.gz` dosyasının bağlantısını kopyalayın.
    wget http://download.redis.io/redis-stable.tar.gz
  3. Arşivi açın ve dizine girin:
    tar xvzf redis-stable.tar.gz
    cd redis-stable
  4. Derleyin ve kurun:
    make
    make test (İsteğe bağlı, kurulumu test eder)
    sudo make install
  5. Bu yöntem Redis dosyalarını `/usr/local/bin` dizinine kopyalar. Servis olarak çalıştırmak için ek yapılandırma adımları gereklidir.

macOS Üzerine Homebrew ile Kurulum

macOS kullanıcıları için en popüler ve kolay yöntem açık kaynaklı paket yöneticisi olan Homebrew’u kullanmaktır.

  1. Homebrew yüklü değilse, yükleyin: Talimatları resmi Homebrew sitesinden (brew.sh) alabilirsiniz.
  2. Redis’i yükleyin:
    brew install redis
  3. Redis’i bir servis olarak başlatmak için:
    brew services start redis

Windows Üzerinde WSL (Windows Subsystem for Linux) ile Kurulum

Windows’ta Redis çalıştırmanın en modern ve desteklenen yolu WSL kullanmaktır. WSL, Windows içinde bir Linux ortamı sağlar.

  1. WSL’yi etkinleştirin: PowerShell’i yönetici olarak açın ve `wsl –install` komutunu çalıştırın. Bu komut, varsayılan olarak Ubuntu dağıtımını yükleyecektir.
  2. Ubuntu terminalini başlatın: Başlat menüsünden “Ubuntu”yu aratıp çalıştırın. İlk açılışta bir kullanıcı adı ve parola belirlemeniz istenecektir.
  3. Redis’i kurun: Artık tam bir Ubuntu ortamındasınız. Yukarıdaki “Ubuntu/Debian için Paket Yöneticisi (apt) ile Kurulum” bölümündeki adımları izleyin:
    sudo apt update
    sudo apt install redis-server
  4. Redis sunucusunu başlatın:
    sudo service redis-server start

Docker Kullanarak Konteyner Olarak Redis Kurulumu

Docker, uygulamaları ve bağımlılıklarını konteyner adı verilen yalıtılmış ortamlarda çalıştırmanıza olanak tanır. Bu yöntem, platformdan bağımsız, tekrarlanabilir ve hızlı bir kurulum sağlar.

  1. Docker’ın sisteminizde yüklü olduğundan emin olun.
  2. Resmi Redis imajını Docker Hub’dan çekin:
    docker pull redis
  3. Redis konteynerini başlatın:
    docker run --name my-redis-container -p 6379:6379 -d redis
  4. Bu komut, `my-redis-container` adında bir konteyner oluşturur, Redis’in varsayılan portu olan 6379’u ana makinenizin 6379 portuna bağlar ve `-d` parametresi ile arka planda çalışmasını sağlar. Artık Redis’e `localhost:6379` üzerinden erişebilirsiniz.

İlk Çalıştırma ve Temel Yapılandırma

Redis sunucusunu başarıyla kurduktan sonraki adım, onu nasıl yöneteceğinizi, çalıştığını nasıl doğrulayacağınızı ve temel komutları nasıl kullanacağınızı öğrenmektir. Bu bölüm, Redis ile ilk etkileşimlerinizi ve temel yapılandırma adımlarını kapsar.

Redis Sunucusunu Başlatma, Durdurma ve Durumunu Kontrol Etme

Paket yöneticisi ile kurulum yaptıysanız, Redis genellikle bir sistem servisi olarak yapılandırılır. Bu servisleri yönetmek için `systemctl` komutu kullanılır (çoğu modern Linux dağıtımında).

redis-cli: Redis Komut Satırı Arayüzü Kullanımı

redis-cli (Command Line Interface), Redis sunucusuyla etkileşim kurmak için kullanılan temel araçtır. Bu arayüz üzerinden sunucuya komutlar gönderip yanıtlarını alabilirsiniz.

Komut satırına sadece `redis-cli` yazarak arayüzü başlatabilirsiniz:


$ redis-cli
127.0.0.1:6379>

Bu, varsayılan olarak yerel makinede (`127.0.0.1`) ve varsayılan portta (`6379`) çalışan Redis sunucusuna bağlandığınızı gösterir. Artık komutlarınızı bu ekrana yazabilirsiniz.

Kurulumun Doğrulanması: PING ve ECHO Komutları

Sunucu ile bağlantının başarılı olup olmadığını test etmenin en kolay yolu `PING` komutunu kullanmaktır. Sunucu düzgün çalışıyorsa, `PONG` yanıtını döndürür.

127.0.0.1:6379> PING
PONG

`ECHO` komutu ise kendisine verilen mesajı geri döndürür. Bu da bağlantıyı ve komut işleme yeteneğini test etmek için kullanılabilir.


127.0.0.1:6379> ECHO "Merhaba Redis"
"Merhaba Redis"

Bu komutlardan beklenen yanıtları alıyorsanız, Redis kurulumunuz başarılı ve sunucunuz çalışır durumdadır.

Temel Veri İşleme Komutları: SET, GET, INCR, DEL

Redis ile çalışmaya başlamak için birkaç temel anahtar-değer komutunu öğrenmek yeterlidir:

Redis’in Sistem Başlangıcında Otomatik Çalışacak Şekilde Yapılandırılması (Systemd)

Sunucunuz yeniden başlatıldığında Redis’in otomatik olarak başlamasını sağlamak, üretim ortamları için kritik bir adımdır. `systemctl` kullanan sistemlerde bu işlem oldukça basittir.

Servisi etkinleştirmek için aşağıdaki komutu kullanın:

sudo systemctl enable redis-server

Bu komut, sistem başlangıcında Redis servisini başlatmak için gerekli sembolik linkleri oluşturur. Servisi devre dışı bırakmak isterseniz `disable` komutunu kullanabilirsiniz.

sudo systemctl disable redis-server

`redis.conf` Dosyası ile Detaylı Yapılandırma

Redis sunucusunun davranışını kontrol eden tüm ayarlar, `redis.conf` adlı bir yapılandırma dosyasında saklanır. Bu dosya, Redis’in ağ ayarlarından bellek yönetimine, veri kalıcılığından güvenlik politikalarına kadar her yönünü özelleştirmenize olanak tanır. Kurulumunuzu optimize etmek ve güvenli hale getirmek için bu dosyadaki temel direktifleri anlamak önemlidir.

Yapılandırma Dosyasının Yeri ve Önemi

`redis.conf` dosyasının konumu, kurulum yöntemine göre değişir. Paket yöneticisi ile yapılan standart bir Linux kurulumunda genellikle `/etc/redis/redis.conf` yolunda bulunur. Kaynak koddan derleme yapıldıysa, derleme dizininde örnek bir `redis.conf` dosyası oluşturulur.
Bu dosyadaki değişikliklerin geçerli olması için Redis sunucusunun yeniden başlatılması gerekir. Değişiklik yapmadan önce orijinal dosyanın bir yedeğini oluşturmak her zaman iyi bir pratiktir.

Ağ Ayarları

Bu ayarlar, Redis sunucusunun ağ üzerinde nasıl davranacağını ve kimlerin bağlanabileceğini belirler.

bind: Bağlanılacak IP Adresini Belirleme

Varsayılan olarak Redis, sadece yerel makineden (localhost) gelen bağlantıları kabul eder (`bind 127.0.0.1 ::1`). Bu, güvenlik için iyi bir başlangıçtır. Eğer Redis sunucusuna başka makinelerden erişilmesi gerekiyorsa, bu satırı sunucunun yerel ağdaki IP adresi ile değiştirmeniz gerekir (örneğin, `bind 192.168.1.100 127.0.0.1`). Tüm ağ arayüzlerinden gelen bağlantıları dinlemek için `bind 0.0.0.0` kullanabilirsiniz, ancak bu, güvenlik duvarı kuralları ve parola koruması olmadan kesinlikle önerilmez.

port: Sunucunun Çalışacağı Portu Ayarlama

Redis’in varsayılan olarak dinlediği port 6379’dur. Güvenlik nedeniyle veya aynı makinede birden fazla Redis örneği çalıştırmak isterseniz bu portu değiştirebilirsiniz. Örneğin: `port 6380`.

protected-mode: Korumalı Modun Yapılandırılması

`protected-mode` varsayılan olarak `yes` (evet) değerine ayarlanmıştır. Bu mod aktifken, Redis sadece `bind` direktifi ile belirtilen IP adreslerinden gelen bağlantıları kabul eder. Eğer `bind` ayarı yapılmamışsa ve parola (`requirepass`) tanımlanmamışsa, Redis dış ağdan gelen bağlantılara kendini tamamen kapatır. Bu, internete açık, yanlış yapılandırılmış Redis sunucularının güvenliğini sağlamak için önemli bir özelliktir. Üretim ortamlarında `protected-mode yes` ayarını korumak şiddetle tavsiye edilir.

Genel Ayarlar

Bu ayarlar, Redis’in çalışma şekli ve loglama gibi genel davranışlarını kontrol eder.

daemonize: Arka Planda Çalıştırma

Bu ayar `yes` olarak değiştirildiğinde, Redis sunucusu bir “daemon” olarak, yani arka planda çalışır ve terminal oturumu kapatılsa bile çalışmaya devam eder. Paket yöneticileriyle yapılan kurulumlarda servis dosyaları bu işlevi zaten yerine getirdiği için genellikle bu ayara dokunulmaz. Ancak Redis’i manuel olarak başlatıyorsanız, `daemonize yes` kullanışlıdır.

logfile: Log Dosyası Yolunu Belirleme

Redis’in olayları, hataları ve uyarıları kaydedeceği log dosyasının yolunu belirtir. Varsayılan olarak genellikle `/var/log/redis/redis-server.log` gibi bir yola ayarlanmıştır. Sorun giderme ve izleme için bu logları düzenli olarak kontrol etmek önemlidir.

databases: Veritabanı Sayısını Ayarlama

Redis, tek bir örnek içinde birden fazla mantıksal veritabanını destekler. Varsayılan olarak 16 veritabanı (0’dan 15’e kadar numaralandırılmış) bulunur. `redis-cli` üzerinden `SELECT ` komutuyla veritabanları arasında geçiş yapabilirsiniz. Örneğin, `SELECT 1` komutu ile ikinci veritabanına geçersiniz. Bu ayar ile veritabanı sayısını değiştirebilirsiniz: `databases 32`.

Bellek Yönetimi

Redis’in performansını ve kararlılığını doğrudan etkileyen en önemli ayarlardan bazıları bellek yönetimi ile ilgilidir.

maxmemory: Maksimum Bellek Sınırı Belirleme

Bu direktif, Redis’in kullanabileceği maksimum RAM miktarını belirlemenizi sağlar. Örneğin, `maxmemory 2gb` ayarı Redis’i 2 gigabayt ile sınırlar. Bu sınır aşıldığında Redis, `maxmemory-policy` ayarına göre mevcut anahtarlardan bazılarını silmeye başlar. Bu ayarı yapmak, Redis’in sistemdeki tüm belleği tüketerek diğer işlemleri olumsuz etkilemesini önlemek için hayati öneme sahiptir.

maxmemory-policy: Bellek Dolduğunda Uygulanacak Stratejiler

`maxmemory` sınırına ulaşıldığında Redis’in hangi anahtarları sileceğini belirleyen politikadır. En yaygın kullanılan politikalardan bazıları şunlardır:

Doğru politikayı seçmek, uygulamanızın veri erişim desenlerine bağlıdır.

Veri Kalıcılığı (Persistence) Mekanizmaları

Redis’in verileri birincil olarak bellekte tutması, ona olağanüstü bir hız kazandırır. Ancak, sunucunun kapanması, çökmesi veya yeniden başlatılması gibi durumlarda bellekteki verilerin kaybolmaması için kalıcılık (persistence) mekanizmalarına ihtiyaç vardır. Redis, bu ihtiyacı karşılamak için iki farklı ve birbirini tamamlayıcı yöntem sunar: RDB ve AOF. Bu yöntemler, veri dayanıklılığı ve performans arasında farklı dengeler kurar.

RDB (Redis Database) ile Anlık Görüntü (Snapshotting)

RDB, en basit kalıcılık yöntemidir. Belirli zaman aralıklarında veya belirli sayıda yazma işlemi yapıldığında, Redis tüm veri setinin anlık bir görüntüsünü (snapshot) alır ve bunu sıkıştırılmış bir ikili dosya (`dump.rdb`) olarak diske kaydeder. Sunucu yeniden başladığında, bu dosyayı okuyarak durumu en son anlık görüntüye geri yükler.

`save` Yapılandırma Direktifleri

RDB’nin ne zaman tetikleneceği `redis.conf` dosyasındaki `save` direktifleriyle belirlenir. Birden fazla `save` kuralı tanımlanabilir. Örneğin:

save 900 1
save 300 10
save 60 10000

Bu kurallar şu anlama gelir:

RDB Mekanizmasının Avantajları ve Dezavantajları

Avantajları:

Dezavantajları:

AOF (Append Only File) ile Günlükleme

AOF (Yalnızca Ekleme Dosyası), RDB’ye göre daha dayanıklı bir kalıcılık yöntemidir. Bu modda Redis, sunucuya gelen her yazma komutunu (veri ekleyen, değiştiren veya silen) bir log dosyasına (`appendonly.aof`) sırayla ekler. Sunucu yeniden başladığında, Redis bu AOF dosyasındaki komutları baştan sona tekrar çalıştırarak veri setini yeniden oluşturur. Bu, veri kaybı riskini önemli ölçüde azaltır.

`appendfsync` Politikaları (always, everysec, no)

AOF’nin ne kadar sıklıkla diske yazılacağını (fsync) `appendfsync` direktifi belirler. Bu ayar, dayanıklılık ve performans arasında bir denge kurar:

AOF Mekanizmasının Avantajları ve Dezavantajları

Avantajları:

Dezavantajları:

RDB ve AOF’nin Birlikte Kullanımı ve En İyi Pratikler

En yüksek seviyede veri güvenliği için Redis, hem RDB hem de AOF mekanizmalarının aynı anda etkinleştirilmesini destekler. Bu senaryoda:

Genel öneri: Eğer veri kaybına karşı çok düşük bir toleransınız varsa (finansal veriler, kritik kullanıcı bilgileri vb.), hem AOF’yi (`appendfsync everysec` ile) hem de RDB’yi etkinleştirin. Eğer birkaç dakikalık veri kaybı kabul edilebilirse ve öncelik hızlı yedekleme ve kurtarma ise (örneğin bir önbellek sunucusu için), sadece RDB kullanmak yeterli olabilir.

Redis Güvenlik Yapılandırması ve En İyi Pratikler

Redis, son derece hızlı ve verimli olacak şekilde tasarlanmıştır, ancak varsayılan kurulumu güvenli bir ağ ortamında çalıştırılmak üzere optimize edilmiştir. İnternete açık veya güvenilmeyen ağlarda çalışacak Redis sunucularının ek güvenlik önlemleriyle yapılandırılması kritik öneme sahiptir. Bu bölümde, Redis sunucunuzu yetkisiz erişime ve kötü niyetli saldırılara karşı korumak için uygulamanız gereken temel güvenlik adımlarını ele alacağız.

`requirepass` ile Parola Koruması Ekleme

Redis sunucusunu korumanın ilk ve en önemli adımı, bir parola belirlemektir. Bu, `redis.conf` dosyasındaki `requirepass` direktifi ile yapılır.

# redis.conf dosyasında
requirepass SizinCokGuvenliParolaniz

Bu ayarı yaptıktan ve Redis’i yeniden başlattıktan sonra, istemcilerin herhangi bir komut yürütebilmesi için önce `AUTH` komutuyla kimlik doğrulaması yapması gerekir.

$ redis-cli
127.0.0.1:6379> SET anahtar deger
(error) NOAUTH Authentication required.

127.0.0.1:6379> AUTH SizinCokGuvenliParolaniz
OK

127.0.0.1:6379> SET anahtar deger
OK

Parolanızın karmaşık ve tahmin edilmesi zor olduğundan emin olun.

Tehlikeli Komutların Devre Dışı Bırakılması veya Yeniden Adlandırılması (`rename-command`)

Redis, sunucu yönetimi ve hata ayıklama için güçlü komutlar içerir. Ancak `FLUSHALL` (tüm veritabanlarını siler), `CONFIG` (sunucu yapılandırmasını anlık olarak değiştirir) veya `KEYS` (üretim ortamında performansı olumsuz etkileyebilir) gibi komutlar, kötü niyetli bir kullanıcı tarafından ele geçirildiğinde büyük hasara yol açabilir.
`redis.conf` dosyasındaki `rename-command` direktifi ile bu komutları devre dışı bırakabilir veya tahmin edilmesi zor isimlerle yeniden adlandırabilirsiniz.

Komutu devre dışı bırakmak için boş bir dizeye yeniden adlandırın:


# FLUSHALL komutunu tamamen devre dışı bırakır
rename-command FLUSHALL ""

Komutu yeniden adlandırmak için:


# CONFIG komutunu tahmin edilmesi zor bir isimle değiştirir
rename-command CONFIG "a8f5b1c9d2e3f4a5b6c7d8e9f0a1b2c3"

Bu, yetkisiz kullanıcıların bu tehlikeli komutları çalıştırmasını engeller.

Güvenli Bir Ağ Yapılandırması ve Güvenlik Duvarı Kuralları

En temel güvenlik prensiplerinden biri, Redis sunucusuna erişimi sadece ihtiyaç duyan sistemlerle sınırlamaktır.

Redis sunucusunu asla doğrudan internete açık bırakmayın.

SSL/TLS ile İstemci-Sunucu İletişimini Şifreleme

Varsayılan olarak, Redis istemcileri ile sunucu arasındaki iletişim şifrelenmemiştir. Bu, ağ trafiğini dinleyen birinin komutları ve verileri (parola dahil) görebileceği anlamına gelir. Güvenilmeyen ağlar üzerinden (örneğin, internet) Redis’e bağlanıyorsanız, iletişimi SSL/TLS ile şifrelemek çok önemlidir.
Redis 6.0 ve üzeri sürümler, yerel olarak TLS desteği sunar. Bu özelliği etkinleştirmek için `redis.conf` dosyasında aşağıdaki gibi yapılandırmalar yapmanız gerekir:

# TLS portunu etkinleştir. Genellikle normal porttan farklı bir port kullanılır.
tls-port 6380
# Sertifika ve anahtar dosyalarının yolları
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
# Sertifika yetkilisinin (CA) dosyası
tls-ca-cert-file /path/to/ca.crt

Bu yapılandırma, sunucu ve istemci arasında güvenli, şifrelenmiş bir bağlantı kanalı oluşturur ve “man-in-the-middle” saldırılarına karşı koruma sağlar.

Redis Veri Tipleri ve Kullanım Senaryoları

Redis’in gücü, sadece hızlı bir anahtar-değer deposu olmasından değil, aynı zamanda çeşitli ve güçlü yerleşik veri tiplerini desteklemesinden gelir. Bu veri tipleri, atomik operasyonlarla yönetilir ve geliştiricilerin karmaşık sorunları daha az kodla, doğrudan veritabanı seviyesinde çözmelerine olanak tanır. Her veri tipinin kendine özgü kullanım senaryoları vardır.

Strings (Dizeler)

En temel Redis veri tipidir. Anahtarlar bir dizeye (string) eşlenir. Bu dizeler metin, serileştirilmiş JSON nesneleri veya 512 MB’a kadar ikili veri (örneğin, bir resim) olabilir.
Kullanım Senaryoları:

Lists (Listeler)

Eklenme sırasına göre sıralanmış bir dize koleksiyonudur. Listeler, hem başından (sol) hem de sonundan (sağ) eleman ekleme ve çıkarma işlemlerini (push/pop) çok verimli bir şekilde yapabilir.
Kullanım Senaryoları:

Hashes (Karma Haritalar)

Bir anahtar içinde alan-değer (field-value) çiftlerini depolamak için kullanılır. Bu, bir nesnenin özelliklerini gruplamak için idealdir.
Kullanım Senaryoları:

Sets (Sıralanmamış Kümeler)

Tekrarlanmayan, sırasız dize koleksiyonlarıdır. Kümeler, eleman ekleme, çıkarma, varlığını kontrol etme gibi işlemleri çok hızlı yapar. Ayrıca kümeler arası birleşim (union), kesişim (intersection) ve fark (difference) gibi operasyonları destekler.
Kullanım Senaryoları:

Sorted Sets (Sıralı Kümeler)

Sıralı kümeler, her bir elemanın bir “skor” ile ilişkilendirildiği, tekrarlanmayan dize koleksiyonlarıdır. Elemanlar bu skora göre sıralı olarak tutulur. Bu, Redis’in en güçlü veri tiplerinden biridir.
Kullanım Senaryoları:

Diğer Veri Tipleri (Bitmaps, HyperLogLogs, Geospatial)

Redis, daha özel kullanım durumları için gelişmiş veri tipleri de sunar:

Veri TipiAçıklamaYaygın Kullanım SenaryosuÖrnek Komutlar
StringsBasit anahtar-değer depolamaÖnbellekleme, SayaçlarSET, GET, INCR
ListsSıralı eleman koleksiyonuMesaj Kuyrukları, Zaman ÇizelgeleriLPUSH, RPOP, LRANGE
HashesBir anahtar altında alan-değer çiftleriKullanıcı Profilleri, Oturum YönetimiHSET, HGET, HGETALL
SetsTekrarlanmayan, sırasız eleman kümesiEtiketleme, Benzersizlik KontrolüSADD, SISMEMBER, SINTER
Sorted SetsSkora göre sıralanmış, tekrarlanmayan eleman kümesiLider Tabloları, Puanlama SistemleriZADD, ZRANGE, ZRANK

Yüksek Erişilebilirlik (High Availability) ve Ölçeklendirme

Tek bir Redis sunucusu, birçok uygulama için yeterli performansı sunsa da, üretim ortamlarında tek bir sunucuya bağımlı kalmak risklidir. Sunucunun donanım arızası, ağ kesintisi veya bakım nedeniyle hizmet dışı kalması, uygulamanın tamamen durmasına neden olabilir. Ayrıca, veri seti büyüdüğünde veya trafik arttığında tek bir sunucunun kaynakları (RAM, CPU) yetersiz kalabilir. Redis, bu tür sorunları çözmek için yüksek erişilebilirlik (high availability) ve ölçeklendirme (scaling) için çeşitli stratejiler sunar.

Redis Replication (Master-Slave Mimarisi)

Replikasyon, verilerin bir Redis sunucusundan (master) bir veya daha fazla başka Redis sunucusuna (slave/replica) kopyalanması işlemidir. Bu mimari, hem veri yedekliliği hem de okuma performansını artırma amacıyla kullanılır.

Redis Sentinel ile Otomatik Yük Devretme (Automatic Failover)

Standart replikasyonda, master sunucu çöktüğünde bir slave’in master olarak atanması manuel bir işlemdir. Redis Sentinel, bu süreci otomatikleştiren bir yüksek erişilebilirlik çözümüdür.

Redis Cluster ile Veri Parçalama ve Yatay Ölçeklendirme (Sharding)

Replikasyon ve Sentinel, yüksek erişilebilirlik sağlar ancak veri setinin tamamının hala her sunucunun belleğine sığması gerekir. Veri seti tek bir makinenin RAM kapasitesini aştığında veya yazma trafiği tek bir master sunucunun CPU’sunu zorladığında, Redis Cluster devreye girer.

Redis Cluster, hem ölçeklenebilirlik hem de yüksek erişilebilirlik sorunlarına entegre bir çözüm sunar ve büyük ölçekli Redis dağıtımları için standart haline gelmiştir.

Redis Sunucusunu İzleme (Monitoring) ve Bakım

Redis sunucusunun üretim ortamında sağlıklı, performanslı ve kararlı bir şekilde çalışmasını sağlamak için düzenli izleme ve bakım faaliyetleri hayati önem taşır. Redis, sunucunun iç durumu hakkında zengin bilgi sağlayan ve olası sorunları teşhis etmeye yardımcı olan yerleşik komutlar sunar. Bu araçları etkin bir şekilde kullanmak, performans darboğazlarını erkenden tespit etmenize ve sistemin genel sağlığını korumanıza olanak tanır.

`INFO` Komutu ile Detaylı Sunucu Bilgileri Alma

`INFO` komutu, Redis sunucusunun mevcut durumu hakkında kapsamlı bilgi ve istatistikler sunan en önemli izleme aracıdır. Bu komut, sunucu, istemciler, bellek, kalıcılık, istatistikler, replikasyon, CPU ve küme gibi birçok farklı bölüme ayrılmış yüzlerce metrik döndürür.
redis-cli INFO
Bazı önemli metrikler şunlardır:

`INFO` komutunun çıktısı, Prometheus gibi izleme sistemleriyle entegre edilerek zaman içindeki eğilimleri gözlemlemek için kullanılabilir.

`MONITOR` Komutu ile Komutları Gerçek Zamanlı İzleme

`MONITOR` komutu, bir hata ayıklama aracıdır ve Redis sunucusuna gelen tüm komutları gerçek zamanlı olarak bir akış halinde gösterir. Bu, uygulamanızın Redis ile nasıl etkileşimde bulunduğunu anlamak, beklenmedik komutları tespit etmek veya performans sorunlarını araştırmak için son derece kullanışlıdır.

redis-cli MONITOR
OK
1678886400.123456 [0 127.0.0.1:54321] "SET" "mykey" "myvalue"
1678886401.654321 [0 127.0.0.1:54321] "GET" "mykey"

Uyarı: `MONITOR` komutu, yüksek trafikli bir sunucuda ciddi performans düşüşlerine neden olabilir. Bu nedenle, sadece kısa süreli hata ayıklama seansları için ve dikkatli bir şekilde kullanılmalıdır. Üretim ortamında sürekli olarak çalıştırılmamalıdır.

`SLOWLOG` ile Yavaş Çalışan Komutları Tespit Etme

Redis’in performansı genellikle komutların ne kadar sürede yürütüldüğüne bağlıdır. `SLOWLOG` özelliği, belirtilen bir süreden daha uzun süren komutları kaydeden bir mekanizmadır. Bu, performans darboğazlarına neden olan verimsiz komutları (örneğin, büyük koleksiyonlar üzerinde çalışan `KEYS` veya `LRANGE` gibi komutlar) bulmak için paha biçilmezdir.
`redis.conf` dosyasında `slowlog-log-slower-than` direktifi ile eşik değeri (mikrosaniye cinsinden) belirlenir. Örneğin, 10000 mikrosaniyeden (10 milisaniye) daha uzun süren komutları kaydetmek için:
slowlog-log-slower-than 10000
Kaydedilen yavaş komutları görmek için `SLOWLOG GET` komutu kullanılır:

redis-cli SLOWLOG GET 10 # En son 10 yavaş komutu getir

Bu komut, komutun ne zaman yürütüldüğü, ne kadar sürdüğü ve komutun kendisi hakkında bilgi verir.

Performans Optimizasyonu İçin İpuçları

Redis sunucunuzdan en iyi performansı almak için dikkat etmeniz gereken bazı genel pratikler şunlardır:

Redis Hosting ve Yönetimi İçin Neden İHS Telekom’u Tercih Etmelisiniz?

Redis kurulumu, yapılandırması, güvenliği ve bakımı, özellikle büyük ölçekli ve kritik uygulamalar için ciddi bir uzmanlık ve zaman gerektirir. Altyapı yönetimiyle uğraşmak yerine tamamen uygulamanıza odaklanmak istiyorsanız, profesyonel bir hosting sağlayıcısı ile çalışmak en doğru seçenektir. İHS Telekom, Redis gibi yüksek performanslı teknolojiler için optimize edilmiş, güvenilir ve ölçeklenebilir sunucu çözümleri sunarak işinizi kolaylaştırır.

İHS Telekom’un sunduğu güçlü VDS ve VPS sunucu seçenekleri, Redis’in ihtiyaç duyduğu yüksek RAM ve hızlı işlem gücünü garanti eder. Modern donanımlar ve yüksek hızlı ağ altyapısı sayesinde, Redis’in düşük gecikme süresi avantajından sonuna kadar faydalanırsınız. Sunucularımız, en güncel güvenlik yamaları ve en iyi pratikler doğrultusunda yapılandırılarak verilerinizin güvenliğini en üst düzeyde tutar. Ayrıca, 7/24 teknik destek ekibimiz, olası sorunlarda hızlı ve etkili çözümler sunarak sisteminizin kesintisiz çalışmasını sağlar.

İşletmeniz büyüdükçe artan trafik ve veri yükünü karşılamak için kaynaklarınızı kolayca artırabilirsiniz. İHS Telekom’un esnek hosting çözümleri, ihtiyaçlarınıza göre ölçeklenerek maliyet avantajı sağlar. Redis altyapınızı İHS Telekom’a emanet ederek, sunucu yönetimi, yedekleme, izleme ve güvenlik gibi karmaşık operasyonel yüklerden kurtulur, enerjinizi ve kaynaklarınızı asıl işinize, yani yenilikçi uygulamalar geliştirmeye yönlendirebilirsiniz. Güçlü altyapı, uzman destek ve rekabetçi fiyatlarla projeniz için en sağlam temeli İHS Telekom’da bulabilirsiniz. Web siteniz için bir alan adı tescil ederek ilk adımı atabilir, popüler içerik yönetim sistemleri için optimize edilmiş WordPress hosting paketlerimizi inceleyebilirsiniz.

Exit mobile version