Redis verileri bellekte tutar ve yaklaşık bir milisaniyede yanıt verir; bu yüzden pek çok uygulamanın arkasında önbellek, kuyruk ya da oturum deposu olarak durur. Kurulum tek bir komut. Asıl iş varsayılanlarda: bellek sınırı yok, son yazmaları kaybedebilen anlık görüntüler ve verilerinizi sessizce silen ya da parolanızı devre dışı bırakan iki kolay hata. Bu rehber hepsini Ubuntu 24.04 üzerinde ele alıyor. Her adımı kendi imajımızda çalıştırdık; sayılar bir Micro sunucusundan (2 vCPU, 2 GB).
sudo yetkili bir kullanıcıya ihtiyacınız var. Ubuntu kurulum rehberi bir tane oluşturur.
1. Kurulum
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
Kurulum 13 saniye sürdü ve Redis 7.0.15'i getirdi. Hemen ve her açılışta başlar, PONG yanıtını verir ve yalnızca sunucunun kendisinde dinler: 127.0.0.1:6379 ve [::1]:6379, protected-mode yes ile. Veri yokken 13,5 MB RAM kullanıyordu.
Günlükte daha şimdiden bir uyarı vardı:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Redis diske, fork ile oluşturduğu kendi kopyasından kaydeder ve çekirdeğin varsayılan ayarıyla bu fork, bellek darken başarısız olabilir. Bir kez düzeltin:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server
Yeniden başlatmadan sonra uyarı kayboldu.
2. Belleğini sınırlayın
Kutudan çıktığı haliyle maxmemory değeri 0, yani sınırsız, politika da noeviction. Redis, sunucuda bellek bitene kadar RAM almaya devam eder. Bir tavan koyun ve tavana ulaşınca ne olacağına karar verin:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
İki politikayı 64 MB sınır ve 400.000 yazmayla denedik:
noeviction(varsayılan): bellek 63 MB'ta durdu ve yeni yazmalarOOM command not allowed when used memory > 'maxmemory'hatasıyla başarısız oldu. Bir kuyruk ya da kaybetmeyi göze alamayacağınız her şey için doğru seçim.allkeys-lru: Redis en uzun süredir kullanılmayan anahtarları, toplam 48.606 tanesini attı ve tüm yazmalar geçti. Önbellek için doğru seçim.
CONFIG REWRITE çalışan ayarları /etc/redis/redis.conf dosyasına kaydeder, böylece yeniden başlatmada kaybolmazlar. Ayrıca 4. adımdan önce bilmeniz gereken bir satır ekler.
3. Diske nasıl kaydedeceğini seçin
Varsayılan olarak Redis, bir saatte 1, beş dakikada 100 ya da bir dakikada 10.000 değişiklikten sonra bir anlık görüntü (/var/lib/redis/dump.rdb) yazar. Durdurmanın üç yolunu denedik:
| Redis nasıl durdu | Yalnızca anlık görüntü (varsayılan) | AOF dosyasıyla |
|---|---|---|
systemctl restart | Kayıp yok: kapanırken kaydeder | Kayıp yok |
kill -9 ile öldürüldü | Son anlık görüntüden sonra yazılan anahtar yoktu | Kill'den 2 saniye önce yazılan anahtar yerindeydi |
İki durumda da systemd, Redis'i birkaç saniye içinde kendiliğinden yeniden başlattı.
Redis'te kaybedince arayacağınız veriler varsa AOF dosyasını (append-only file) açın. Her yazmayı kaydeder ve saniyede bir diske boşaltır. Bunu dosyayı düzenleyerek değil, çalışan sunucuda yapın:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
Önce öteki yolu denedik ve verilerimize mal oldu. redis.conf içinde appendonly no satırını appendonly yes yaptık ve yeniden başlattık. Redis boş bir AOF ile açıldı ve anlık görüntüden hiçbir şey yüklemedi; mevcut tüm anahtarlar gitti. Sonra kapanırken yeni içeriğini, eski anahtarlar olmadan, bir de dump.rdb üzerine yazdı. CONFIG SET bunu önler: Redis önce AOF'u bellekteki verilerden yazar. Yeniden başlatmadan sonra tüm anahtarlarımız yerindeydi.
Redis boş başlayabilecek saf bir önbellekse tersini yapın ve kaydetmeyi redis-cli CONFIG SET save "" ile kapatın.
4. Bir parola belirleyin
İşte ikinci tuzak. Herhangi bir CONFIG REWRITE sonrasında Redis 7, redis.conf dosyasının sonuna şu satırı ekler:
user default on nopass ~* &* +@all
Bu "varsayılan kullanıcının parolaya ihtiyacı yok" demek. Ardından dosyanın daha yukarısına requirepass ekleyip yeniden başlattık. Redis parolasız olarak hâlâ PONG yanıtını veriyordu, çünkü user satırı onu geçersiz kılıyor. Parolayı bunun yerine Redis üzerinden belirleyin:
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
Parolayı güvenli bir yerde saklayın. Redis artık onu aynı user default satırında SHA-256 özeti olarak tutuyor. Yeniden başlatmadan sonra redis-cli ping NOAUTH Authentication required. yanıtını verdi ve yalnızca parola işe yaradı. Parolayı redis-cli'ye REDISCLI_AUTH değişkeniyle verin. -a ile süreç listesinde görünür ve redis-cli bu konuda uyarır. Uygulamanızda onu Redis adresine yazın: redis://:PASSWORD@127.0.0.1:6379/0.
5. Bilgisayarınızdan erişin
Redis'i 127.0.0.1 üzerinde bırakın ve bir SSH tüneli kullanın. Sunucunuzun SSH portunu kullanın; NAT planlarında bu sizin kişisel portunuzdur:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Bu çalıştığı sürece redis-cli -p 6380 ve bilgisayarınızdaki masaüstü araçları sunucudaki Redis ile konuşur. İnternete yeni hiçbir şey açılmaz. SSH anahtarı rehberiyle tünel parolasız giriş yapar.
Ne kadar hızlı
Micro test sunucusunda 50 istemcili redis-benchmark şunu verdi:
| Test | Saniyedeki istek | Medyan gecikme |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, gidiş-dönüş başına 16 komut | 272.109 | 2,4 ms |
| GET, gidiş-dönüş başına 16 komut | 414.938 | 1,3 ms |
Bir web uygulamasının önbelleği ya da iş kuyruğu için bu, ihtiyacınızdan çok daha fazlası. Ekstra hız, komutları toplu göndermekten (pipelining) geliyor.
Hangi plan
Redis'in verileriniz için RAM'e ihtiyacı var, başka pek bir şeye değil. Nano (2 vCPU, 1 GB, $3/ay) maxmemory 256mb ile küçük bir uygulamanın yanında Redis'i çalıştırır. Micro (2 GB, $5/ay) daha büyük bir önbellek ve uygulama için yer bırakır. Başka bir şeyin Redis'e doğrudan bağlanması gerekiyorsa kendi IPv4'ünüzü alın (Nano-IP ile $8/ay'dan başlayarak) ve güvenlik duvarında yalnızca o adrese izin verin. Tüm planlar VPS sayfasında; ödeme Base, Ethereum veya Polygon üzerinde USDT, USDC ya da ETH ile yapılır.
Yorumlar
Henüz yorum yok. İlk olun.