Redis ilə Caching — Azərbaycan Trafik Piklərini İdarə Etmək
Bayram günləri saytın çökür? Redis ilə caching qurub, saniyədə 100K sorğunu rahat idarə etməyi öyrən — real kod və rəqəmlərlə.
Redis ilə Caching — Azərbaycan Trafik Piklərini İdarə Etmək
Novruz bayramında e-commerce saytın çökdü? Ramazan ayında food delivery app-in 504 qaytardı? Seçki gecəsi xəbər portalın "502 Bad Gateway" göstərdi? Tanış gəlir, elə deyil?
Azərbaycanda işləyən hər bir backend developer bu ssenarini yaşayıb. Problemin kökü sadədir: hər sorğu birbaşa database-ə gedir, database isə pikdə tab saxlaya bilmir. Həll? Redis ilə caching.
Bu məqalədə Redis-in nə olduğunu, niyə lazım olduğunu və real layihədə necə tətbiq edəcəyini konkret kod və rəqəmlərlə göstərəcəyəm.
Niyə Redis? Niyə indi?
Gəlin rəqəmlərlə danışaq:
- PostgreSQL-dən oxuma: ~5-25 ms (indekslərlə)
- Redis-dən oxuma: ~0.1-0.5 ms
- Fərq: təxminən 50x daha sürətli
Bir Bakı startupından real nümunə: gündəlik 50K aktiv istifadəçisi olan bir marketplace PostgreSQL-də pikdə 3200 ms response time göstərirdi. Redis cache əlavə etdikdən sonra bu rəqəm 180 ms-ə düşdü. Server xərcləri isə aylıq 45 AZN azaldı (çünki 2 əlavə replica-ya ehtiyac qalmadı).
Azərbaycanın trafik pikləri proqnozlaşdırılandır:
- 🎉 Novruz bayramı (mart) — e-commerce, hədiyyə saytları
- 🌙 Ramazan — food delivery, restoran app-ləri
- 🎓 Qəbul imtahanları (iyun-iyul) — dim.gov.az, hazırlıq platformaları
- 🛒 11.11, Black Friday — bütün e-commerce
- ⚽ Qarabağ FK Avropa matçları — xəbər portalları, betting
Bilmək kifayət deyil — hazır olmaq lazımdır.
Redis Nədir? 30 Saniyəlik İzahat
Redis — in-memory data store-dur. Yəni məlumatları RAM-da saxlayır, diskdə yox. Buna görə inanılmaz sürətlidir. Key-value store kimi işləyir, amma string, list, set, hash, sorted set kimi data structure-ları dəstəkləyir.
Redis-i belə düşün: database-in önündə duran super yaddaşlı köməkçi. Eyni sualı hər dəfə database-ə göndərmək əvəzinə, köməkçi cavabı yadda saxlayır.
Praktiki Nümunə: Node.js + Redis ilə API Caching
Təsəvvür et, bir e-commerce saytında məhsul siyahısını qaytaran endpoint var. Hər request-də database-ə sorğu göndərmək əvəzinə, Redis-dən oxuyacağıq.
Əvvəlcə quraşdırma:
bash# Redis-i Docker ilə qaldır docker run -d --name my-redis -p 6379:6379 redis:7-alpine # Node.js dependency-lər npm install express ioredis pg
İndi əsas kod:
javascriptconst express = require('express'); const Redis = require('ioredis'); const { Pool } = require('pg'); const app = express(); const redis = new Redis({ host: '127.0.0.1', port: 6379 }); const db = new Pool({ connectionString: process.env.DATABASE_URL }); const CACHE_TTL = 300; // 5 dəqiqə (saniyə ilə) // Cache middleware async function cacheMiddleware(req, res, next) { const key = `cache:${req.originalUrl}`; try { const cached = await redis.get(key); if (cached) { console.log('✅ Cache HIT:', key); return res.json(JSON.parse(cached)); } console.log('❌ Cache MISS:', key); next(); } catch (err) { console.error('Redis xətası, database-ə keçirik:', err.message); next(); // Redis çöksə belə, app işləməyə davam edir } } // Məhsul siyahısı endpoint app.get('/api/products', cacheMiddleware, async (req, res) => { const { rows } = await db.query( 'SELECT id, name, price, image_url FROM products WHERE active = true ORDER BY created_at DESC LIMIT 50' ); // Cavabı Redis-ə yaz const key = `cache:${req.originalUrl}`; await redis.setex(key, CACHE_TTL, JSON.stringify(rows)); res.json(rows); }); // Məhsul yeniləndikdə cache-i təmizlə (Cache Invalidation) app.put('/api/products/:id', async (req, res) => { // ... database update logic ... // Əlaqədar cache key-ləri sil const keys = await redis.keys('cache:/api/products*'); if (keys.length > 0) { await redis.del(...keys); console.log('🗑️ Cache invalidated:', keys.length, 'key silindi'); } res.json({ success: true }); }); app.listen(3000, () => console.log('Server 3000 portunda işləyir'));
Bu sadə pattern ilə məhsul siyahısı endpoint-inin yükünü 90%+ azalda bilərsən.
Cache Strategiyaları: Hansını Seçməli?
| Strategiya | İstifadə yeri | TTL |
|---|---|---|
| Cache-Aside | Ümumi məhsul siyahıları | 5-15 dəq |
| Write-Through | İstifadəçi profili, session | Dəyişənədək |
| Write-Behind | Analitika, log counter | 30-60 dəq |
| TTL-based | Valyuta məzənnəsi (CBB), hava | 1-5 dəq |
Azərbaycan kontekstində bir neçə real ssenari:
- Valyuta məzənnəsi (USD/AZN): CBB gündə 1 dəfə yeniləyir → TTL: 6 saat
- Restoran menyusu: nadir dəyişir → TTL: 1 saat, dəyişəndə invalidate
- Axtarış nəticələri: populyar sorğular üçün → TTL: 10 dəqiqə
- İstifadəçi session-ları: Redis-də saxla, JWT ilə birlikdə → TTL: 24 saat
Cache Invalidation: Ən Çətin Hissə
Phil Karlton-un məşhur sözü var: "Kompüter elmində iki çətin şey var: cache invalidation və naming things."
Praktiki qaydalar:
- TTL həmişə qoy — Ən pis halda məlumat TTL sonunda yenilənəcək
- Event-driven invalidation — Məlumat dəyişəndə əlaqədar cache-i sil
- Key naming convention-a sadiq qal —
cache:products:list,cache:products:42,cache:user:session:abc123 keys *əmrini production-da istifadə etmə —SCANistifadə et
Production Üçün Redis Checklist
- ✅ Maxmemory policy qur:
allkeys-lru(RAM dolduqda ən köhnə key-ləri silir) - ✅ Redis Sentinel və ya Redis Cluster istifadə et (single point of failure olmasın)
- ✅ Monitoring qur:
redis-cli INFO statsilə hit/miss ratio-nu izlə - ✅ Connection pooling istifadə et (ioredis bunu default edir)
- ✅ Fallback pattern yaz: Redis çöksə, birbaşa database-dən oxu
- ✅ Serialization optimizə et: böyük data üçün MessagePack > JSON
Hit ratio-n 85%-dən aşağıdırsa, TTL strategiyanı yenidən nəzərdən keçir.
Maaş Konteksti: Redis Bilmək Nə Qədər Dəyərlidir?
Bakı bazarında orta backend developer maaşları (2026, təxmini):
- Junior (Redis bilməyən): 800-1200 AZN
- Mid-level (Redis + caching pattern-lar): 1800-2800 AZN
- Senior (Redis Cluster, distributed caching, system design): 3500-5500 AZN
- Remote (xarici şirkətlər): $2000-5000+
Redis və distributed systems bilmək sənin mid → senior keçidini sürətləndirən ən vacib skilllərdən biridir. Müsahibələrdə "System Design" bölməsində caching sualları 90% ehtimalla gəlir.
Nəticə: Bu Gün Başla
- Lokal maşınında
docker run redis:7-alpineilə Redis qaldır redis-cliiləSET,GET,TTL,EXPIREəmrlərini öyrən- Mövcud layihəndə ən çox çağırılan endpoint-i tap və cache əlavə et
- Hit/miss ratio-nu monitorinq et
- Novruz pikindən əvvəl hazır ol, sonra yox 😄
Redis öyrənmək çətin deyil — onu düzgün istifadə etmək sənəti isə təcrübə ilə gəlir. Başla, sındır, düzəlt, öyrən.
Cache etmədiyin hər sorğu, istifadəçinin gözlədiyi əlavə millisaniyədir. ⚡
Sualın var? Kommentdə yaz, cavablayaq. Növbəti məqalə: "Message Queues — RabbitMQ vs Redis Streams Azərbaycan reallığında"
Oxşar məqalələr
Supabase RLS — Məlumatlarını Bank Səviyyəsində Qoru
Supabase Row Level Security ilə hər istifadəçi yalnız öz datasını görür. Bank tətbiqi nümunəsi ilə RLS-i addım-addım öyrən.
PostgreSQL vs MongoDB — Bakı Startapın üçün Hansını Seçməlisən?
Azərbaycanlı developer olaraq startap qurmaq istəyirsən? PostgreSQL və MongoDB arasında düzgün seçim etmək üçün real kod, rəqəmlər və yerli kontekst burada.
Epoint və PAYRIFF: Azərbaycan Fintech Ödəniş API İnteqrasiyası
Azərbaycanda ödəniş qəbul etmək istəyirsən? Epoint və PAYRIFF API-lərini real kod nümunələri ilə addım-addım inteqrasiya edək — sandbox-dan production-a qədər.