Logo GH

Texnologiyalar va infratuzilma → Redis: in-memory-echimlar

Redis: in-memory-echimlar

1) Redis qayerda o’rinli

Redis - boy ma’lumotlar tuzilmalariga ega yuqori tezlikdagi in-memory ombori. Tipik stsenariylar:
  • Kesh (read-through/aside, TTL, SWR) va sessiyalar.
  • Hisoblagichlar va kvotalar: rate limiting, antifrod, kampaniya limitlari.
  • Yetakchi bordlar/reytinglar (ZSet), «top-N» tavsiyalari.
  • Voqealar navbatlari/shinalari (Streams/PubSub), outbox/inbox, retray.
  • Idempotentlik (TTL kalitlari), de-dup vebxuklar.
  • Geo (eng yaqin nuqtalarni qidirish), Bitmap (bayroqlar, DAU).
  • Avtorizatsiyaning taxalluslari/tokenlari va qisqa yashaydigan keshlari.
💡 Muhimi: pul balanslari va tanqidiy invariantlar uchun Redis faqat oʻqish tezlatgichi yoki DBB/ledger’da «haqiqat manbai» boʻlgan jurnal/kesh sifatida ishlatiladi.

2) Ma’lumotlar tuzilmasi va ularni qachon qo’llash

String: qiymatlar/hisoblagichlar (’INCRBY’), idempotent kalitlar.
Hash: profil/konfiguratsiya agregatlari, yengil vaznli obʼektlarni saqlash.
List: oddiy navbatlar (lekin replay/offset-semantikasiz).
Set: noyob elementlar, deduplikatsiya.
ZSet: tezlik boʻyicha saralash (liderbordlar, TTL taqvimi - «kechiktirilgan» voqealar).
Stream: isteʼmol guruhlari bilan barqaror navbatlar, «XREADGROUP »/replay - vebxuklar, CDC, retraylar uchun.
Geo:’GEOADD/GEORADIUS’- eng yaqin nuqtalar/merchantlar.
Bitmap/Bitfield: bayroqlar seriyasi (kunlar boʻyicha loginlar, DAU/WAU).
HyperLogLog: taxminan noyob (UU) xotirada arzon.
Bloom/Cuckoo (modullar): tezkor tekshirish, manbaga «MISS» ni kamaytiradi.

Modullar:
  • RedisJSON (JSON hujjatlar), RediSearch (indekslash/qidirish), RedisBloom (ehtimollik tuzilmalari), TimeSeries (metriklar/agregatsiyalar).

3) Kalitlar, TTL va xotira siyosati

Neyming va segmentatsiya:

tenant:{t}:domain:{d}:{entity}:{id}:v{schema}    region={R}    currency={C}    lang={L}

Faqat muhim oʻlchamlarni (mintaqa/valyuta/til/tenant) kiriting.
Per-tenant kalitlarini izolyatsiya qiling.

TTL va «yangilik»:
  • TTL matritsasidan foydalaning (sek/min/soat), stampedadan qochish uchun jitter qo’shing (10-20% ±).
  • Issiq kalitlar uchun - refresh-ahead va single-flight (bitta rahbar yangilaydi).
Siqib chiqarish siyosati (maxmemory-policy):
  • ’allkeys-lru/lfu’ - TTL qaramligi bo’lmagan umumiy kesh.
  • ’volatile-lru/lfu’ - faqat TTL kalitlari.
  • ’noeviction’ - to’lib-toshganda yozishning rad etilishi (kritik navbatlar/hisoblagichlar uchun xavfsizroq).
  • Skript uchun tanlash va har doim’evicted _ keys’ni kuzatib borish.

4) Tranzaksiyalar, payplaynlar va skriptlar

Payplaynlar: RTTni kamaytiring, 10-100 jamoani guruhlang.
Tranzaksiyalar (MULTI/EXEC): oʻqishni izolyatsiya qilmaydi, lekin toʻplamni atomik ravishda bajaradi.
Optimistic locking:’WATCH key’→ tekshirish →’MULTI/EXEC’.
Lua skriptlari: server tomonidagi atomik mantiq (rate limit, locks, composite-operatsiyalar).

💡 Bir tugunli Redis Lua skriptlari uchun yaxshi; Cluster’da - barcha kalitlar bitta xesh-slotga tushishiga ishonch hosil qiling.

5) Navbatlar va shinalar: List vs Stream

List +’BRPOP’- oddiy, lekin hech qanday consumer groups, offset/replay, qulashga nisbatan zaif chidamlilik.
Stream:’HADD → XREADGROUP → XACK’, retry-deadletter (N daqiqada qabul qilinmagan), kalit bo’yicha partiyalash. PSP/KYC vebxuklari, kechiktirilgan toʻlovlar/xabarnomalar uchun tavsiya etiladi.

Ustuvor navbatlar: ustuvor yo’nalishlar bo’yicha bir nechta oqim, iste’molchilar birinchi navbatda yuqoridan «so’radi».
Kechiktirilgan vazifalar: ZSet bu yerda score = timestamp; davriy’ZRANGEBYSCORE’≤ now → Stream.

6) Yuqori ommaboplik va masshtablash

Replikatsiya: master → replica (read-scale).
Sentinel: avtomatik failover master’a, aniqlash, mijozlar URI.
Redis Cluster: 16384 ta slot, gorizontal shale-out. Bir nechta tuzilmalardan foydalanuvchi kalitlarni’{order: 123}’xesh-teglariga oʻrab oling.

Patternlar:
  • Kesh/sessiyalar uchun klaster/replikalar,’client-side hashing’SDK tomonidan qo’llab-quvvatlanadi.
  • Navbatlar/oqimlar uchun - kross-slot operatsiyalarini minimallashtiring; domen kalitlari boʻyicha partiyalashtiring.

7) Persistentlik: RDB, AOF va bekaplar

RDB (rasmlar): tezroq, tejamkor; oxirgi soniya/daqiqani yo’qotish xavfi.
AOF (jurnal): kam yo’qotishlar; ’everysec/always’ rejimlari. AOF siqish va davriy qayta qadoqlash.
Gibrid: RDB + AOF → tez tiklanish + o’rtacha yo’qotishlar.
Bekaplar: obyekt omboriga snapshotlar va AOF nusxalari; qayta tiklanishni muntazam tekshirib turing.

Tanqidiy navbatlar/idempotentlik uchun AOF’everysec’+ replikatsiyasini tanlang.

8) Xavfsizlik va komplayens

AUTH/ACL: per-ilova rollari, «xavfli» buyruqlarni taqiqlash (’FLUSHALL’,’KEYS’).
mijoz-server va tarmoqlararo linklarga TLS; qat’iy egress-IP.
Tarmoqni segmentlash: shaxsiy kichik tarmoqlar, SG/NACL; faqat kerakli servislar/neyspeyslardan foydalanish.
Sirlarni yoritmang; Redisda PAN/PII - faqat tokenlar/derivativlar.
Tugmalar:’KEYS’dan qoching -’SCAN’dan foydalaning.

9) Kuzatuv va SLO

Asosiy metriklar:
  • Latency (P95/P99), `instantaneous_ops_per_sec`, `connected_clients`.
  • Hit ratio, evicted_keys, expired_keys.
  • Memory: used, fragmentation ratio, RSS, allocator stats.
  • Replication lag, AOF/RDB chastotalari va oʻlchamlari, fork time.
  • Streams: PEL (pending entries list), delivery latency, retry count.
SLO-misollar:
  • Redis P99 operatsiyalari ≤ 5-10 ms.
  • Evictions ≤ 1 %/soat (kesh).
  • Stream delivery P99 ≤ 500 мс, retry rate < 2%.

10) FinOps va resurslarni rejalashtirish

Xotira qimmat: $/GB-oy RAM o’lchang vs origin/DB so’rovlarini tejash.

💡 1-2 KB siqishni yoqing (CPUga qarang).

LFU kichik hajmda eng yaxshi hit berishi mumkin.
Rasm/katta bloblar uchun Redis emas: CDN + obʼekt saqlovidan foydalaning.

11) iGaming/fintech uchun patternlar

11. 1 Rate limiting (harakatlanuvchi oyna, Lua)

G’oya:’INCRBY’oynaning kalitida + TTL; Lua limitni atomik tekshiradi va ko’paytiradi.

lua
-- KEYS[1]=key ARGV[1]=limit ARGV[2]=ttlSec ARGV[3]=inc local cur = redis. call('INCRBY', KEYS[1], ARGV[3])
if cur == tonumber(ARGV[3]) then redis. call('EXPIRE', KEYS[1], ARGV[2]) end if cur > tonumber(ARGV[1]) then return {0, cur} else return {1, cur} end

11. 2 So’rovlarning idempotentligi

’idemp: {request _ id}’ s TTL 24h, natija/maqom. Operatsiyani bajarishdan oldin - mavjudligini tekshiramiz.

11. 3 Liderbordlar

`ZINCRBY leaderboard:game:{g} score user:{u}` → `ZREVRANGE... WITHSCORES`.
Mintaqa/tenant bo’yicha top-N uchun - alohida ZSet yoki prefikslar.

11. 4 PSP vebxuklarining navbati

’HADD psp: webhooks...’ → isteʼmolchilar guruhlari’XGROUP CREATE psp: webhooks g1 $’.
PEL-skanerlash (’XPENDING’→’XCLAIM’) orqali «osilgan» xabarlarni retraylar.

11. 5 Kechiktirilgan to’lovlar

ZSet’payout: due’(score = epoch) → vorker vaqti-vaqti bilan tugallangan elementlarni de-duplikatsiya bilan Stream’payout: exec’ga olib boradi.

11. 6 Antifrod hisoblagichlar

’PFADD’ (noyob) +’INCR’(intensivlik) + geo/ASN-belgilar kombinatsiyasi; qo’lda tekshirish uchun triggerlar.

12) Xotira va unumdorlik bilan ishlash

Mijozlarning ulanish pullari; RTT (keep-alive) ni kamaytiring.
Buyruqlar paketi uchun payplaynlarni afzal koʻring.
Big keys (’MEMORY USAGE’,’SCAN’) - ob’ektlarni maydalash yaxshiroqdir.
Kichik maydonli hash ko’plab alohida kalitlarga qaraganda tejamkor.
Agar profit testlar bilan tasdiqlansa, io-threads (read-heavy) ni yoqing.
Proda’FLUSHDB/ALL’tez-tez boʻlmasin; xavfsiz oʻchirish uchun prefikslar va’UNLINK’orqali boshqaring.

13) Multi-tenant va izolyatsiya

Alohida klasterlar/instansiyalar yoki logical DB per-tenant (agar yuk kichik bo’lsa).
Kalit/xotira kvotalari, alohida ACL.
Kalit prefikslari va namespace metrikasi.

14) Locking va muvofiqlik

SET key val NX PX = ttl - oddiy mutex.
Redlock: ehtiyotkorlik bilan foydalanish; taqsimlangan tanqidiy tranzaksiyalar uchun «haqiqat manbai» (DB/ledger) va idempotent operatsiyalariga tayanish yaxshiroqdir.
«Uzoq» blokirovkalar o’rniga atom va Lua operatsiyalarini afzal ko’ring.

15) Anti-patternlar

Katta bloblar/tasvirlarni saqlash - RAM va tarmoqlarni ortiqcha yuklash.
Moliyaviy invariantlar (balans) faqat Redisda.
«KEYS» va «dunyoni skanerlash».
TTL/jitter yoʻqligi - tugashi bilan dogpile.
Tanqidiy navbatlardagi’allkeys-’siyosati → bosim paytida ma’lumotlarni yo’qotish.
Bir instansiyada navbat, kesh va sessiyalarni kvota va ustuvorliklarsiz aralashtirish.
Clusterdagi turli slotlarning kalitlari bilan ishlaydigan Lua skriptlari.

16) Joriy etish chek-varaqasi

1. Kesh/sessiyalar, navbatlar/oqimlar, hisoblagichlar/limitlar rollarini aniqlang - instantsiya/klasterlarga tarqating.
2. Vazifa uchun maxmemory-policy ni tanlang; limitlar va evictions monitoringini o’rnating.
3. Kalitlar neymingi, sxemalar versiyasi, TTL matritsasi + jitter; top-kalitlar uchun single-flight.
4. Navbatlar uchun - Streams (guruhlar, retraylar, DLQ), kechiktirilganlar uchun - ZSet + transfer.
5. HA: + Sentinel yoki Redis Cluster replikatsiyasi; mijozning failoverini tekshiring.
6. Persistentlik: RDB/AOF stsenariyda; doimiy bekaplar va tiklanish testi.
7. Xavfsizlik: ACL, TLS, xususiy tarmoqlar, xavfli buyruqlarni taqiqlash.
8. Kuzatilganlik: latency, ops/sec, memory, evictions, replication lag, stream PEL.
9. FinOps: xotira profillari, katta kalitlar, siqish, LFU; katta bloblar uchun Redisdan qoching.
10. Patternlar hujjatlari (rate-limit, idempotentlik, liderbordlar) va yuklamalar testlari.

Jami

Redis - bu «ko’p funksiyali shveytsariya pichog’i» tezligi: kesh, navbatlar, hisoblagichlar, liderbordlar, geo va ehtimoliy tuzilmalar. Uning kuchi - ma’lumotlar tuzilmasini to’g "ri tanlash, TTL/nogironlik intizomi, operatsiyalarning atomligi, shuningdek, puxta o’ylangan MA/persistentlik va kuzatiluvchanlikda. Millisekundlar va yuqori RPS muhim bo’lgan joyda Redisdan foydalaning va tanqidiy invariantlarni (pul, hisob) «haqiqat manbai» ga qoldiring - platforma tez va ishonchli bo’lib qoladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.