Blog/backend/Redis ilə Caching — Azərbaycan Trafik Piklərini İdarə Etmək
backend

Redis ilə Caching — Azərbaycan Trafik Piklərini İdarə Etmək

B
Baku Stack AI
·16 aprel 2026·5 dəq oxuma·14 baxış
backend.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ BACKEND ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ → GET /api/products ▓
▓ ● Redis: 0.3ms ✓ ▓
▓ ● PgSQL: 18ms ↓ ▓
▓ ▓
▓ Cache HIT ratio: ▓
▓ ▓▓▓▓▓▓▓▓▓░░ 92% ▓
▓ ▓
▓ Trafik piki: ▓
▓ ░░▒▒▓▓▓▓▓▓▓▓ Novruz ▓
▓ Response: 180ms ⚡ ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

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:

javascript
const 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ə yeriTTL
Cache-AsideÜmumi məhsul siyahıları5-15 dəq
Write-Throughİstifadəçi profili, sessionDəyişənədək
Write-BehindAnalitika, log counter30-60 dəq
TTL-basedValyuta məzənnəsi (CBB), hava1-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:

  1. TTL həmişə qoy — Ən pis halda məlumat TTL sonunda yenilənəcək
  2. Event-driven invalidation — Məlumat dəyişəndə əlaqədar cache-i sil
  3. Key naming convention-a sadiq qalcache:products:list, cache:products:42, cache:user:session:abc123
  4. keys * əmrini production-da istifadə etməSCAN istifadə 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 stats ilə 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

  1. Lokal maşınında docker run redis:7-alpine ilə Redis qaldır
  2. redis-cli ilə SET, GET, TTL, EXPIRE əmrlərini öyrən
  3. Mövcud layihəndə ən çox çağırılan endpoint-i tap və cache əlavə et
  4. Hit/miss ratio-nu monitorinq et
  5. 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"

Teqlər

Paylaş:𝕏 Twitter✈ Telegram
Bəyəndim

Oxşar məqalələr

backend.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ SECURITY ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ● Supabase RLS ▓
▓ ─────────────────── → ▓
▓ auth.uid() = user_id ▓
▓ ▓
▓ SELECT ░░ → ✓ own row ▓
▓ SELECT ░░ → ✗ others ▓
▓ ▓
▓ Policy: ▓▓▓▓▓▓▓░░ 80% ▓
▓ Safety: ▓▓▓▓▓▓▓▓▓ 99% ▓
▓ ✓ Bank-level security ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

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.

backend.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ DATABASE ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ 🐘 PostgreSQL ▓
▓ ▓▓▓▓▓▓▓▓▓▓░░░░ 71% ▓
▓ → SQL ● ACID ● JOIN ▓
▓ → Bakı corp: ✓✓✓ ▓
▓──────────────────────▓
▓ 🍃 MongoDB ▓
▓ ▓▓▓▓▓▓▓▓░░░░░░ 55% ▓
▓ → NoSQL ● Fast ● MVP ▓
▓ → Startap: ✓✓✓ ▓
▓ Seçim → Layihəyə bax ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

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.

backend.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ FINTECH API ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ User → [myapp.az] ▓
▓ ↓ POST /create ▓
▓ Backend → Epoint API ▓
▓ ↓ redirect_url ▓
▓ User → ödəniş səhifə ▓
▓ ↓ kart: 4169 7xxx ▓
▓ Epoint → webhook ▓
▓ ↓ signature ✓ ▓
▓ DB: status=paid ● ▓
▓ ▓▓▓▓▓▓▓▓░░ 80% done ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

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.

← Bloqa qayıt