Технология жана инфраструктура → Redis: in-memory-solutions
Redis: in-memory-solutions
1) кайда Redis ылайыктуу
Redis - бай маалымат түзүмдөрү менен жогорку ылдамдыктагы in-memory сактоо ачкыч мааниси. Типтүү жагдайлар:- Кэш (read-through/aside, TTL, SWR) жана сессиялар.
- Эсептегичтер жана квоталар: rate limiting, антифрод, кампаниялардын лимиттери.
- Лидборддор/рейтингдер (ZSet), сунуштар "жогорку N".
- кезек/шиналар окуялар (Streams/PubSub), outbox/inbox, retry.
- Демпотенттик (TTL менен ачкычтар), de-dup webhook.
- Geo (жакын жерлерди издөө), Bitmap (желектер, DAU).
- Псевдонимдер/токендер жана кыска мөөнөттүү авторизация кэштери.
2) Берилиштердин түзүлүшү жана аларды качан колдонуу
String: баалуулуктар/эсептегичтер ('INCRBY'), демпотенттик ачкычтар.
Hash: профилдер/конфигурациялардын агрегаттары, "жеңил" объектилерди сактоо.
тизме: жөнөкөй кезек (бирок replay/offset-семантика жок).
Set: уникалдуу элементтер, deduplication.
ZSet: spot сорттоо (лидборддор, TTL календары - "кечигип" окуялар).
Агым: керектөө топтору менен туруктуу кезектер, 'XREADGROUP '/replay - вебхуктар, CDC, ретрайлер үчүн.
Geo: 'GEOADD/GEORADIUS' - жакынкы чекиттер/соодагерлер.
Bitmap/Bitfield: желектер сериясы (күн логиндер, DAU/WAU).
HyperLogLog: болжолдуу уникалдуу (UU) эс арзан.
Bloom/Cuckoo (модулдары): тез текшерүү, булагы "MISS" азайтат.
- RedisJSON (JSON документтер), RediSearch (индекстөө/издөө), RedisBloom (ыктымалдык структуралар), TimeSeries (метрика/агрегация).
3) ачкычтары, TTL жана эс саясаты
Нейминг жана сегментация:
tenant:{t}:domain:{d}:{entity}:{id}:v{schema} region={R} currency={C} lang={L}
Версияңыз ('vN'), маанилүү өлчөмдөрдү гана киргизиңиз (аймак/валюта/тил/тенант).
per-tenant ачкычтарынын мейкиндигин бөлүп.
- TTL матрицасын (сек/мин/саат) колдонуңуз, stampede болтурбоо үчүн джиттерди (10-20% ±) кошуңуз.
- Ысык ачкычтар үчүн - refresh-ahead жана single-flight (бир лидер жаңылайт).
- 'allkeys-lru/lfu' - TTL көз карандылыгы жок жалпы кэш.
- 'volatile-lru/lfu' - TTL менен гана ачкычтар.
- 'noeviction' - толуп кеткенде жазуудан баш тартуу (критикалык кезектер/эсептегичтер үчүн коопсуз).
- сценарийин тандоо жана дайыма 'evicted _ keys' мониторинг жүргүзүү.
4) Транзакциялар, пайплайндар жана сценарийлер
Payplays: RTT кыскартуу, топ 10-100 команда.
Транзакциялар (MULTI/EXEC): окууну обочолонтпойт, бирок атомдук түрдө пакетти аткарат.
Optimistic locking: 'WATCH key' → текшерүү → 'MULTI/EXEC'.
Луа скрипттери: сервер тарабындагы атомдук логика (rate limit, locks, composite-операциялар).
5) кезек жана шиналар: тизме vs агым
List + 'BRPOP' - жөнөкөй, бирок эч кандай consumer groups, offset/replay, начар түшүү каршылык.
Stream: 'HADD → XREADGROUP → XACK', retry-deadletter (N мүнөттө алынбайт), ачкыч боюнча партиялаштыруу. PSP/KYC вебхуктары, кийинкиге калтырылган төлөмдөр/билдирүүлөр үчүн сунушталат.
Артыкчылыктуу кезектер: артыкчылыктар боюнча бир нече агымдар, керектөөчүлөр биринчи кезекте жогоркудан "сорушат".
Кийинкиге калтырылган тапшырмалар: ZSet кайда score = timestamp; мезгил-мезгили менен 'ZRANGEBYSCORE' ≤ now → Stream өткөрүп берүү.
6) Жогорку жеткиликтүүлүк жана масштабдоо
Репликация: master → replica (read-scale).
Sentinel: автоматтык failover master 'a, аныктоо, кардар URI.
Redis Cluster: 16384 Slot боюнча шардана, горизонталдуу scale-out. Бир нече структураларды колдонгон ачкычтарды '{order: 123}' хэш тегине ороңуз.
- Кэш/сессиялар үчүн - кластер/репликалар, 'client-side hashing' SDK тарабынан колдоого алынган.
- Кезек/агым үчүн - кросс-слот операцияларын минималдаштыруу; домен ачкычтары боюнча партиялаштырыңыз.
7) Туруктуу: RDB, AOF жана Backup
RDB (сүрөттөр): тезирээк, үнөмдүү; акыркы секунд/мүнөт жоготуу коркунучу.
AOF (журнал): аз жоготуулар; 'everysec/always' режимдери. AOF кысуу жана мезгил-мезгили менен пакеттөө.
Гибрид: RDB + AOF → тез калыбына келтирүү + орточо жоготуу.
Backaps: объект сактоо үчүн snapshots жана AOF көчүрмөлөрү; калыбына келтирүүнү такай текшерип туруңуз.
Критикалык кезек/демпотенттик үчүн AOF 'everysec' + репликациясын тандаңыз.
8) Коопсуздук жана комплаенс
AUTH/ACL: per-тиркеменин ролу, "коркунучтуу" буйруктарга тыюу салуу ('FLUSHALL', 'KEYS').
TLS кардар-сервер жана түйүндөр аралык линияларга; белгиленген egress-IP.
Тармактын сегментациясы: жеке тармактар, SG/NACL; керектүү кызматтардан/неймспейстерден гана кирүү.
Сырлар логин жок; PAN/PII Redis - гана токендер/туунду.
Ачкыч буйруктары: 'KEYS' дегенден алыс болуңуз - 'SCAN' дегенди колдонуңуз.
9) Байкоо жана SLO
Негизги көрсөткүчтөр:- 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 жыштыгы жана өлчөмдөрү, fork time.
- Streams: PEL (pending entries list), delivery latency, retry count.
- Redis P99 ≤ 5-10 ms.
- Evictions ≤ 1 %/саат (кэш-мейкиндик).
- Stream delivery P99 ≤ 500 мс, retry rate < 2%.
10) FinOps жана ресурстарды пландаштыруу
Эстутум кымбат: $/GB-ай RAM vs origin/DD үчүн суроо-талаптарды үнөмдөө өлчөө.
LFU аз көлөмдө мыкты хитти бере алат.
Сүрөттөр/чоң блобдор үчүн - Redis эмес: CDN + объектти сактоо.
11) iGaming/Fintech үчүн үлгүлөр
11. 1 Rate Limiting (Жылма терезе, Lua)
Идея: 'INCRBY' терезенин ачкычында + TTL; Lua атомдук чекти текшерет жана көбөйтөт.
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 Суроо-талаптардын ыктымалдыгы
Key 'idemp: {request _ id}' менен TTL 24h, мааниси - натыйжасы/абалы. Операцияны аткаруудан мурун - бар экендигин текшеребиз.
11. 3 Лидборддор
`ZINCRBY leaderboard:game:{g} score user:{u}` → `ZREVRANGE... WITHSCORES`.
Аймак/тенант боюнча топ-N үчүн - өзүнчө ZSet же префикстер.
11. 4 PSP Webhook кезеги
'HADD psp: webhooks...' → керектөө топтору 'XGROUP CREATE psp: webhooks g1 $'.
PEL-сканерлөө ('XPENDING' → 'XCLAIM') аркылуу "илинген" билдирүүлөрдү ретрациялоо.
11. 5 Кийинкиге калтырылган төлөмдөр
ZSet 'payout: due' (score = epoch) → воркер мезгил-мезгили менен даяр элементтерди Stream 'payout: exec' дегенге алып барат.
11. 6 Антифрод эсептегичтери
Комбинация 'PFADD' (уникалдуу) + 'INCR' (интенсивдүүлүгү) + гео/ASN-белгилер; кол менен текшерүү үчүн триггерлер.
12) эс жана аткаруу менен иштөө
Кардарлардын байланыш пулдары; RTT азайтуу (keep-alive).
Командалардын пакетине пайплайндарды артык көрүңүз.
Big keys ('MEMORY USAGE', 'SCAN') - объектилерди майдалоо жакшы.
Аз сандагы талаалар менен Hash көптөгөн жеке ачкычтарга караганда үнөмдүү.
Эгерде пайда тесттер менен тастыкталса, io-threads (read-heavy) киргизиңиз.
Fast 'FLUSHDB/ALL' тукумунда; коопсуз алып салуу үчүн префикстер жана 'UNLINK' аркылуу башкаруу.
13) Көп-тенант жана изоляция
Жеке кластерлер/бийлик же логикалык DB per-tenant (жүк аз болсо).
ачкычтар/эстутум, өзүнчө ACL.
namespace боюнча ачкычтардагы префикстер жана метриктер.
14) Locking жана ырааттуулук
SET key val NX PX = ttl - жөнөкөй mutex.
Redlock: кылдат колдонуу; бөлүштүрүлгөн маанилүү бүтүмдөр үчүн "чындык булагы" таянуу жакшы (DD/ledger) жана демпотенттик бүтүмдөр.
ордуна атомдук иш жана Lua артык "узак" кулпулоо.
15) Анти-үлгүлөрү
Чоң блобдорду/сүрөттөрдү сактоо - RAM жана тармактарды ашыкча жүктөө.
Финансылык инварианттар (баланс) Redis гана.
'KEYS' жана "дүйнөнү сканерлөө".
TTL/Jitter жоктугу - мөөнөтү бүткөндөн кийин dogpile.
Саясат 'allkeys-' сындуу кезек → басым боюнча маалыматтарды жоготуу.
Бир инстанцияда кезек, кэш жана сессияларды квотасыз жана артыкчылыктарсыз аралаштыруу.
Lua скрипттери Cluster ар кандай уячалардын ачкычтары менен иштейт.
16) Киргизүү чек-тизмеси
1. Ролдорду аныктаңыз: кэш/сессиялар, кезектер/агымдар, эсептегичтер/лимиттер - органдарга/кластерлерге таратыңыз.
2. тапшырма үчүн maxmemory-policy тандоо; чектөөлөрдү жана мониторинг evictions.
3. Neuming Keys, схемалар нускалары, TTL-матрица + Jitler; жогорку ачкычтар үчүн бир-flight.
4. кезек үчүн - Streams (топтор, retry, DLQ), кечигип үчүн - ZSet + өткөрүп берүү.
5. HA: Replication + Sentinel же Redis Cluster; кардардын failover текшерүү.
6. Туруктуу: сценарий боюнча RDB/AOF; үзгүлтүксүз backaps жана калыбына келтирүү сыноо.
7. Коопсуздук: ACL, TLS, жеке тармактар, кооптуу буйрук тыюу салуу.
8. Байкоо: latency, ops/sec, memory, evictions, replication lag, PEL агымы.
9. FinOps: эс профилдери, чоң ачкычтар, компрессия, LFU; чоң блобдор үчүн Redis алыс.
10. Документация паттерн (rate-limit, idempotentity, лидборддор) жана жүктөө тесттер.
Жыйынтык
Redis - бул "көп функциялуу Swiss бычак" ылдамдыгы: кэш, кезек, эсептегичтер, лидборддор, гео жана ыктымалдык структуралар. Анын күчү маалымат түзүмдөрүн туура тандоодо, TTL/майыптык дисциплинасында, операциялардын атомдук жөндөмдүүлүгүндө, ошондой эле ойлонулган НА/туруктуулукта жана байкоодо. Маанилүү миллисекунддар жана жогорку RPS болгон жерде Redis колдонуңуз, ошол эле учурда критикалык инварианттарды (акча, эсеп) "чындык булагына" калтырыңыз - ошентип платформа тез жана ишенимдүү бойдон калат.