Blog’a Dön

Redis Nedir? Kurulumu ve Kullanım Alanları

Redis nedir, ne işe yarar? Önbellek, oturum ve kuyruk için Redis, Ubuntu sunucuya kurulum, güvenli ayarlar, bellek sınırı, kalıcılık ve WordPress.

Nodesty Ekibi4 dk okumaSunucular
Koyu Nodesty arka planında Redis yazısı ile Cache, Sessions ve Queues ifadeleri

Redis, verileri bellekte (RAM'de) tutan, son derece hızlı, açık kaynaklı bir anahtar-değer veri deposudur. Veriler diskte değil bellekte durduğu için okuma ve yazma işlemleri mikrosaniyeler sürer. Bu yüzden Redis en çok önbellek, oturum deposu ve iş kuyruğu olarak kullanılır: Sık tekrarlanan veritabanı sorgularının sonuçlarını saklar, kullanıcı oturumlarını tutar ve arka planda çalışacak işleri sıraya koyar.

Bu yazıda Redis'in ne olduğunu, hangi durumlarda işe yaradığını, Ubuntu sunucuya kurulumunu, güvenli ayarları ve WordPress ile kullanımını anlatıyoruz.

Redis nasıl çalışır?

Redis her veriyi bir anahtar ile saklar. Değer basit bir metin olabileceği gibi liste, küme, sıralı küme ya da hash gibi veri yapıları da olabilir:

SET kullanici:42:ad "Ayşe"
GET kullanici:42:ad
EXPIRE kullanici:42:ad 3600

EXPIRE, anahtarın belirli bir süre sonra kendiliğinden silinmesini sağlar; önbellek kullanımının temelidir. Redis tek bir ana iş parçacığında çalışır ve komutları sırayla işler; bu, hem çok hızlı hem de öngörülebilir olmasını sağlar.

Redis ne işe yarar?

  • Önbellek: Pahalı veritabanı sorgularının ya da API cevaplarının sonuçlarını belirli bir süre saklar. Sonraki istekler veritabanına gitmeden bellekten cevaplanır.
  • Oturumlar: Kullanıcı oturumlarını hızlı ve birden fazla uygulama sunucusunun ortak erişebileceği bir yerde tutar.
  • İş kuyrukları: E-posta gönderme ya da görsel işleme gibi işleri arka plana alır. Laravel'in kuyrukları ve Node.js'teki BullMQ gibi kütüphaneler Redis kullanır.
  • Hız sınırlama: Bir IP adresinin dakikada kaç istek gönderdiğini saymak için idealdir.
  • Sıralamalar ve sayaçlar: Sıralı kümeler, oyun liderlik tablolarını ve canlı sayaçları kolaylaştırır.
  • Yayın/abonelik (pub/sub): Uygulamaların ve sunucuların birbirine anlık mesaj göndermesini sağlar.

Redis, MariaDB gibi bir veritabanının yerini almaz; onun önünde durarak yükünü hafifletir. Veritabanı kurulumunu MySQL ve MariaDB kurulumu rehberimizde anlattık.

Ubuntu ve Debian'a Redis kurulumu

Sunucunuza SSH ile bağlandıktan sonra:

sudo apt update
sudo apt install redis-server
sudo systemctl enable --now redis-server

Kurulumu test edin:

redis-cli ping

Cevap PONG ise Redis çalışıyordur. Docker kullanıyorsanız resmî redis imajını da kullanabilirsiniz; portunu yalnızca 127.0.0.1 adresine bağlamayı unutmayın. Nedenini Docker kurulumu rehberimizde anlattık.

Güvenli ayarlar

Redis'in ayarları /etc/redis/redis.conf dosyasındadır. Şu satırları kontrol edin:

bind 127.0.0.1 -::1
protected-mode yes
requirepass guclu-ve-uzun-bir-sifre
maxmemory 256mb
maxmemory-policy allkeys-lru
  • bind: Redis'in yalnızca sunucunun kendisinden erişilebilir olmasını sağlar. Redis'i asla internete açmayın; açık Redis sunucuları otomatik taramalarla dakikalar içinde bulunup ele geçirilir.
  • protected-mode: Şifresiz bir Redis'in dışarıdan bağlantı kabul etmesini engeller.
  • requirepass: Bağlanan uygulamaların şifre göndermesini zorunlu kılar. Uzun ve rastgele bir şifre seçin.
  • maxmemory: Redis'in kullanabileceği en fazla bellek. Bu sınır olmadan Redis, sunucudaki diğer uygulamaların belleğini tüketebilir.
  • maxmemory-policy: Sınıra ulaşıldığında ne yapılacağı. allkeys-lru, en uzun süredir kullanılmayan anahtarları siler ve önbellek kullanımı için idealdir. Redis'i kuyruk ya da kalıcı veri için kullanıyorsanız noeviction seçin; böylece veriler sessizce silinmez.

Değişikliklerden sonra servisi yeniden başlatın:

sudo systemctl restart redis-server
redis-cli -a 'guclu-ve-uzun-bir-sifre' ping

Başka bir sunucudaki uygulamanın Redis'e erişmesi gerekiyorsa portu açmak yerine iki sunucuyu WireGuard gibi özel bir ağla bağlayın.

Kalıcılık: RDB ve AOF

Redis verileri bellekte tutar, ama sunucu yeniden başladığında verileri geri yükleyebilmek için diske de yazabilir:

  • RDB (anlık görüntü): Belirli aralıklarla bütün verilerin bir kopyası diske yazılır. Hızlıdır ve yedeklemesi kolaydır, ama son görüntüden sonraki değişiklikler kaybolabilir.
  • AOF (ekleme günlüğü): Her yazma işlemi bir günlüğe eklenir. Kayıp çok daha azdır, ama dosya daha büyüktür.

Yalnızca önbellek olarak kullanıyorsanız kalıcılığı kapatabilirsiniz; Redis yeniden başladığında önbellek zaten kendiliğinden dolar. Oturumlar ve kuyruklar için AOF'u açmak (appendonly yes) daha güvenlidir.

Uygulamanızdan Redis'e bağlanma

Çoğu dilde hazır Redis kütüphaneleri vardır. Örneğin Node.js'te:

import { createClient } from 'redis';

const redis = createClient({ url: 'redis://:guclu-ve-uzun-bir-sifre@127.0.0.1:6379' });
await redis.connect();

await redis.set('selam', 'dünya', { EX: 60 });
console.log(await redis.get('selam'));

Laravel'de .env dosyasında CACHE_STORE, SESSION_DRIVER ve QUEUE_CONNECTION değerlerini redis yapmanız ve Redis bağlantı bilgilerini girmeniz yeterlidir.

WordPress ile Redis

WordPress, aynı veritabanı sorgularını her sayfa açılışında tekrar tekrar çalıştırır. Nesne önbelleği (object cache), bu sorguların sonuçlarını Redis'te tutar:

  1. Sunucuya Redis'i ve PHP'nin Redis eklentisini kurun (Ubuntu'da php-redis paketi).
  2. WordPress'e Redis Object Cache eklentisini kurup etkinleştirin.
  3. Redis'e şifre koyduysanız wp-config.php dosyasına define( 'WP_REDIS_PASSWORD', 'guclu-ve-uzun-bir-sifre' ); satırını ekleyin.
  4. Eklentinin ayarlarından nesne önbelleğini açın.

Nesne önbelleği, özellikle WooCommerce mağazalarında ve oturum açmış kullanıcıların çok olduğu sitelerde fark yaratır. Diğer hızlandırma yöntemlerini Web sitesi hızlandırma rehberimizde anlattık.

Redis'i izlemek

redis-cli -a 'guclu-ve-uzun-bir-sifre' info memory
redis-cli -a 'guclu-ve-uzun-bir-sifre' info stats

info memory kullanılan belleği, info stats ise önbellek isabetlerini (keyspace_hits) ve kaçırmalarını (keyspace_misses) gösterir. İsabet oranı düşükse önbelleğe alınan veriler çok kısa süre tutuluyor ya da yanlış veriler önbelleğe alınıyor olabilir.

Redis için Nodesty sunucuları

Redis bütün verilerini bellekte tuttuğu için RAM'i bol bir sunucu ister. Nodesty AMD EPYC 7763 VDS paketleri yüksek RAM seçenekleriyle Redis, veritabanı ve uygulamanızı aynı sunucuda rahatça çalıştırmanızı sağlar; AMD Ryzen 9 9950X VDS paketleri ise yüksek tek çekirdek hızıyla Redis'in tek iş parçacıklı yapısından en iyi performansı alır. Her iki pakette de NVMe disk, nShield DDoS koruması ve 7 gün saklanan ücretsiz günlük yedekleme bulunur.

Sıkça Sorulan Sorular

Redis veritabanının yerini alır mı?

Genellikle hayır. Redis, verileri bellekte tutan hızlı bir anahtar-değer deposudur ve çoğu projede MariaDB ya da PostgreSQL gibi bir veritabanının yanında, sık okunan verileri önbelleğe almak için kullanılır. Kalıcı ve ilişkisel veriler için asıl veritabanı gerekir.

Sunucu yeniden başlarsa Redis'teki veriler kaybolur mu?

Kalıcılık ayarlarına bağlıdır. Varsayılan RDB anlık görüntüleri belirli aralıklarla diske yazılır; son görüntüden sonraki değişiklikler kaybolabilir. AOF açıkken her yazma işlemi günlüğe eklendiği için kayıp çok daha azdır. Yalnızca önbellek olarak kullanıyorsanız kalıcılığı kapatmak da bir seçenektir.

Redis için ne kadar RAM gerekir?

Redis bütün verilerini bellekte tutar; ihtiyaç, sakladığınız veriye bağlıdır. Bir web sitesinin nesne önbelleği için genellikle 128–512 MB yeterlidir. maxmemory ayarıyla Redis'in kullanabileceği en fazla belleği sınırlandırın; aksi hâlde sunucudaki diğer uygulamalara yer kalmayabilir.

Redis portunu internete açmalı mıyım?

Hayır. İnternete açık Redis sunucuları otomatik taramalarla hızla bulunur ve ele geçirilir. Redis yalnızca 127.0.0.1 adresini dinlemeli ve şifreyle korunmalıdır. Başka bir sunucudan erişmeniz gerekiyorsa SSH tüneli ya da WireGuard gibi özel bir ağ kullanın.

Redis ile Valkey arasındaki fark nedir?

Valkey, Redis'in lisans değişikliğinden sonra Linux Foundation çatısı altında başlatılan açık kaynaklı bir çatallanmasıdır. Redis'in komutları ve protokolüyle uyumludur; Redis bekleyen uygulamaların büyük kısmı Valkey ile değişiklik yapmadan çalışır.

WordPress'te Redis kullanmak siteyi hızlandırır mı?

Kalabalık, oturum açmış kullanıcıların çok olduğu ve veritabanını yoğun kullanan sitelerde belirgin şekilde hızlandırır; tekrarlanan veritabanı sorgularının sonuçları bellekten gelir. Az ziyaret alan ve sayfa önbelleği kullanan basit sitelerde fark küçüktür.

Nodesty

Yazar hakkında

Nodesty Ekibi · Altyapı ve Destek

Nodesty ekibi sunucularımızı, ağımızı ve DDoS korumamızı her gün işletir ve müşteri destek taleplerini 7/24 yanıtlar. Bu rehberler o deneyimden yazılır.

İlgili yazılar

Sunucunuzu şimdi başlatın.

Nodesty'nin üstün altyapısı ile projelerinizi özgürce inşa edin ve sınır tanımadan ölçeklendirin.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································