Tehnologiýalar we infrastruktura → Redis: in-memory-solutions
Redis: in-memory-solutions
1) Redis ýerlikli
Redis - baý maglumat gurluşlary bolan ýokary tizlikli in-memory ammar açar gymmaty. Adaty ssenariler:- Keş (read-through/aside, TTL, SWR) we sessiýalar.
- Hasaplaýjylar we kwotalar: rate limiting, antifrod, kampaniýalaryň çäkleri.
- Liderbordlar/reýtingler (ZSet), "top-N" teklipleri.
- Wakalaryň nobatlary/tekerleri (Streams/PubSub), outbox/inbox, retra.
- Idempotentlik (TTL açarlary), de-dup webhook.
- Geo (iň ýakyn nokatlary gözlemek), Bitmap (baýdaklar, DAU).
- Ygtyýarnamanyň lakamlary/bellikleri we gysga ömürli keşleri.
2) Maglumatlaryň gurluşlary we olary haçan ulanmak
String: bahalar/hasaplaýjylar ('INCRBY'), idempotent açarlary.
Hash: profil/konfigurasiýa agregatlary, "ýeňil" obýektleri saklamak.
List: ýönekeý nobatlar (ýöne replay/offset semantikasyz).
Set: üýtgeşik elementler, duplikasiýa.
ZSet: tizlik boýunça sortlamak (liderbordlar, TTL-senenama - "gijikdirilen" wakalar).
Akym: sarp ediş toparlary bilen durnukly nobatlar, 'XREADGROUP '/replay - webhuklar, CDC, retraýlar üçin.
Geo: 'GEOADD/GEORADIUS' - iň ýakyn nokatlar/satyjylar.
Bitmap/Bitfield: baýdaklaryň seriýasy (gün boýunça loginler, DAU/WAU).
HyperLogLog: takmynan üýtgeşik (UU) ýat taýdan arzan.
Bloom/Cuckoo (modullar): barlygyny çalt barlamak, çeşmä "MISS" -ni peseldýär.
- RedisJSON (JSON resminamalary), RediSearch (indeksleme/gözleg), RedisBloom (ähtimal gurluşlar), TimeSeries (metrikler/agregasiýalar).
3) Açarlar, TTL we ýat syýasaty
Neýming we segmentasiýa:
tenant:{t}:domain:{d}:{entity}:{id}:v{schema} region={R} currency={C} lang={L}
Wersiýa ('vN'), diňe möhüm ölçegleri goşuň (sebit/walýuta/dil/tenant).
Per-tenant açarlarynyň ýerlerini aýyryň.
- TTL-matrisa (sek/min/sagat) ulanyp, stampededen gaça durmak üçin jitter (10-20% ±) goşuň.
- Gyzgyn açarlar üçin - refresh-ahead we single-flight (bir lider täzelenýär).
- 'allkeys-lru/lfu' - TTL-garaşlylygy bolmadyk umumy keş.
- 'volatile-lru/lfu' - diňe TTL-li açarlar.
- 'noeviction' - aşa köp bolanda ýazgynyň şowsuzlygy (möhüm nobatlar/hasaplaýjylar üçin has ygtybarly).
- Ssenarini saýla we hemişe gözegçilik et 'evicted _ keys'.
4) Geleşikler, paýlaýnlar we skriptler
Paýlaýynlar: RTT-ni peseldiň, 10-100 topara bölüň.
Amallar (MULTI/EXEC): okalmagy izolirlemeýär, ýöne bukjany atom bilen ýerine ýetirýär.
Optimistic locking: 'WATCH key' → barlag → 'MULTI/EXEC'.
Lua-skriptleri: serweriň tarapynda atom logikasy (rate limit, locks, composite-amallar).
5) Nobatlar we tekerler: List vs Stream
List + 'BRPOP' - ýönekeý, ýöne ýok consumer groups, offset/replay, gowşak güýz garşylygy.
Stream: 'HADD → XREADGROUP → XACK', retry-deadletter (N minutda kabul edilmedi), açar boýunça partizasiýa. PSP/KYC webhuklary, gijikdirilen tölegler/habarnamalar üçin maslahat berilýär.
Ileri tutulýan nobatlar: ileri tutulýan ugurlar boýunça birnäçe akym, sarp edijiler ýokary derejeden ilkinji nobatda "sorýarlar".
Yza süýşürilen meseleler: ZSet nirede score = timestamp; wagtal-wagtal 'ZRANGEBYSCORE' ≤ now → Stream-a geçirmek.
6) Ýokary elýeterlilik we masştab
Replikasiýa: master → replica (read-scale).
Sentinel: awtomatiki failover master 'a, tapmak, müşderi URI-leri.
Redis Cluster: 16384 slot üçin şardlamak, gorizontal skale-out. Birnäçe gurluşy ulanýan açarlary '{order: 123}' hashtaglaryna saraň.
- Keş/sessiýalar üçin - klaster/göçürmeler, 'client-side hashing' SDK tarapyndan goldanýar.
- Nobatlar/akymlar üçin - çapraz-slot amallaryny azaldyň; domen açarlary boýunça partiýa.
7) Dowamlylygy: RDB, AOF we ekaplar
RDB (suratlar): has çalt, has tygşytly; soňky sekuntlary/minutlary ýitirmek töwekgelçiligi.
AOF (magazineurnal): az ýitgi; 'everysec/always'. AOF gysmak we wagtal-wagtal gaýtadan gaplamak.
Gibrid: RDB + AOF → çalt dikeldiş + ortaça ýitgiler.
Bellikler: obýekt ammaryna AOF-yň snapshotlary we nusgalary; Dikeldişiňizi yzygiderli barlaň.
Möhüm nobatlar/idempotentlik üçin AOF 'everysec' -ni saýlaň.
8) Howpsuzlyk we gabat gelmek
AUTH/ACL: per-programma rollary, "howply" buýruklara gadaganlyk ('FLUSHALL', 'KEYS').
TLS müşderi-serwerine we düwünlerara linklere; kesgitlenen egress-IP.
Tor segmentasiýasy: hususy kiçi ulgamlar, SG/NACL; diňe zerur hyzmatlardan/nomespeislerden elýeterlilik.
Syrlary ýazmaň; Redisde PAN/PII - diňe tokenler/derivatiwler.
Açar buýruklary: 'KEYS' -den gaça duruň - 'SCAN' -y ulanyň.
9) Synlamak we SLO
Esasy metrikler:- 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 ýygylyklary we ölçegleri, fork time.
- Streams: PEL (pending entries list), delivery latency, retry count.
- Redis P99 ≤ 5-10 ms.
- Evictions ≤ 1 %/sagat (kesh giňişligi).
- Stream delivery P99 ≤ 500 мс, retry rate < 2%.
10) FinOps we çeşmeleri meýilleşdirmek
Ýat gymmat: RAM-yň $/GB-aýyny ölçäň vs origin/DB-e bolan islegleri tygşytlamak.
LFU az mukdarda iň gowy hit berip biler.
Suratlar/uly bloklar üçin - Redis däl: CDN + obýekt ammaryny ulanyň.
11) iGaming/fintech üçin patternler
11. 1 Rate limiting (süýşýän penjire, Lua)
Ideýa: "INCRBY" penjiräniň açarynda + TTL; Lua çäkleri ýadro taýdan barlaýar we ýokarlandyrýar.
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 Haýyşlaryň gidempotentligi
'idemp: {request _ id}' c TTL 24h, bahasy - netije/status. Amal etmezden ozal barlaýarys.
11. 3 Liderbordlar
`ZINCRBY leaderboard:game:{g} score user:{u}` → `ZREVRANGE... WITHSCORES`.
Sebit/tenant boýunça top-N üçin - aýratyn ZSet ýa-da prefiksler.
11. 4 PSP webhuk nobaty
'HADD psp: webhooks...' → sarp ediş toparlary 'XGROUP CREATE psp: webhooks g1 $'.
PEL-skaner arkaly "asylan" habarlaryň retraýalary ('XPENDING' → 'XCLAIM').
11. 5 Yza süýşürilen tölegler
ZSet 'payout: due' (score = epoch) → worker taýýar elementleri wagtal-wagtal Stream 'payout: exec' -e göçürýär.
11. 6 Antifrod hasaplaýjylary
Kombinasiýa 'PFADD' (özboluşly) + 'INCR' (intensiwlik) + geo/ASN-bellikler; el bilen barlamak üçin triggerler.
12) Ýat we öndürijilik bilen işlemek
Müşderileriň baglanyşyk howuzlary; RTT azaltmak (keep-alive).
Bir topar buýruk üçin paýlaýnlary saýlaň.
Big keys ('MEMORY USAGE', 'SCAN') - obýektleri bölmek has gowudyr.
Az meýdanly Hash köp sanly açardan has tygşytly.
Eger girdeji synaglar arkaly tassyklansa, io-threads (read-heavy) -ni açyň.
Prod 'FLUSHDB/ALL' -den gaça duruň; howpsuz aýyrmak üçin prefiksler we 'UNLINK' arkaly dolandyryň.
13) Multi-tenant we izolýasiýa
Aýry-aýry klasterler/edaralar ýa-da logical DB per-tenant (eger ýük az bolsa).
Açarlar/ýat üçin kwotalar, aýratyn ACL.
Açardaky prefiksler we namespace boýunça metrikler.
14) Loking we sazlaşyk
SET key val NX PX = ttl - ýönekeý mutex.
Redlock: seresaplylyk bilen ulanyň; paýlanan möhüm amallar üçin "hakykat çeşmesine" (DB/ledger) we idempotent amallaryna bil baglamak has gowudyr.
"Uzyn" gulplamalaryň ýerine atom operasiýalaryny we Lua-ny makul biliň.
15) Anti-patternler
Uly bloblary/şekilleri saklamak - RAM we torlary aşa ýüklemek.
Maliýe üýtgemeleri (balans) diňe Redisde.
'KEYS' we 'dünýäni skanirlemek'.
TTL/jitteriň ýoklugy - gutaranda dogpile.
Kritiki nobatlarda 'allkeys-' syýasaty → basyşda maglumatlaryň ýitmegi.
Bir edarada nobatlaryň, keşleriň we sessiýalaryň kwotalar we ileri tutulýan ugurlar bolmazdan garyşdyrylmagy.
Cluster-de dürli slotlaryň açarlary boýunça işleýän Lua skriptleri.
16) Girizmegiň çek-sanawy
1. Rollary kesgitläň: keş/sessiýalar, nobatlar/akymlar, hasaplaýjylar/çäkler - häkimiýetlere/toparlara paýlaň.
2. Maksmemory-policy saýlaň; çäkleri we evictions gözegçiligini belläň.
3. Düwmeleriň neýmingi, shemalaryň wersiýalary, TTL-matrisa + jitter; iň ýokary açarlar üçin ýekeje uçuş.
4. Nobatlar üçin - Akymlar (toparlar, retralar, DLQ), yza süýşürilenler üçin - ZSet + transfer.
5. HA: Sentinel ýa-da Redis Kluster göçürmesi; müşderini barlaň.
6. Dowamlylygy: RDB/AOF ssenarisine laýyklykda; yzygiderli ekaplar we dikeldiş synagy.
7. Howpsuzlyk: ACL, TLS, hususy torlar, howply buýruklara gadaganlyk.
8. Syn edilişi: latency, ops/sec, memory, evictions, replication lag, stream PEL.
9. FinOps: ýat profilleri, uly açarlar, gysyş, LFU; uly bloblar üçin Redisden gaça duruň.
10. Patternleriň resminamalary (rate-limit, idempotentlik, liderbordlar) we ýükleriň synaglary.
Jemi
Redis tizligiň "köpugurly Şweýsariýa pyçagy": kesmek, nobatlar, hasaplaýjylar, liderbordlar, geo we ähtimal gurluşlar. Onuň güýji maglumatlaryň gurluşlaryny dogry saýlamakda, TTL/maýyplyk düzgüninde, amallaryň atomarlygynda, şeýle hem oýlanyşykly NA/dowamlylygy we syn edilişinde. Redis-i millisekundlar we ýokary RPS möhüm bolan ýerlerde ulanyň, şol bir wagtyň özünde möhüm üýtgemeleri (pul, hasap) "hakykat çeşmesine" goýuň - platforma çalt we ygtybarly bolar.