Технология ва инфрасохтор → Редис: ҳалли хотира
Редис: ҳалли хотира
1) Дар куҷо Редис мувофиқ аст
Редис як нигаҳдории арзиши калиди хотираи баландсуръат бо сохторҳои бойи додаҳо мебошад. Сенарияҳои маъмулӣ:- Кэш (хондан/ҷудо кардан, TTL, SWR) ва ҷаласаҳо.
- Ҳисобкунакҳо ва квотаҳо: маҳдудияти нархҳо, қаллобӣ, маҳдудиятҳои маърака.
- Leaderboards/рейтингҳо (ZS-et), тавсияҳои "top N".
- Навбати рӯйдодҳо/автобусҳо (ҷараёнҳо/Pub
- Idempotence (калидҳо бо TTL), webhooks de-dup.
- Geo (ҷустуҷӯи нуқтаҳои наздиктарин), Bitmap (парчамҳо, DAU).
- Алафҳо/нишонаҳо ва кэшҳои авторизатсияи кӯтоҳмуддат.
2) Сохторҳои маълумот ва кай ба кор бурдани онҳо
Сатр: арзишҳо/ҳисобкунакҳо ('INCRBY'), калидҳои idempotent.
Hash: маҷмӯи профилҳо/конфигуратсияҳо, нигоҳдории объектҳои "сабук".
Рӯйхат: навбатҳои оддӣ (вале бе семантикаи такрорӣ/ҷуброншаванда).
Set: унсурҳои беназир, deduplication.
ZS et: гурӯҳбандӣ аз рӯи суръат (тахтаҳои пешбар, тақвими TTL - рӯйдодҳои "ба таъхир афтода").
Ҷараён: навбатҳои устувор бо гурӯҳҳои истеъмолкунандагон, 'XREADGROUP '/repay - барои webhooks, CDC, бозпас.
Geo: 'GEOADD/GEORADIUS' - нуқтаҳои наздиктарин/тоҷирон.
Bitmap/Bitfield: силсилаи парчамҳо (вуруд ба рӯз, DAU/WAU).
Log Hyperlog: Unectimate Unique (UU) дар хотира арзон аст.
Bloom/Cuckoo (модулҳо): санҷиши дастрасии зуд, кам кардани "MISS" ба манбаъ.
- RedisJSON (ҳуҷҷатҳои JSON), Redi
3) Сиёсати калидҳо, TTL ва хотира
Номгузорӣ ва сегментатсия:
tenant:{t}:domain:{d}:{entity}:{id}:v{schema} region={R} currency={C} lang={L}
Версия ('v)' танҳо андозаҳои пурмазмунро дар бар мегирад (минтақа/асъор/забон/иҷорагир).
Фосилаҳои калидии ҳар як иҷорагирро ҷудо кунед.
- Матритсаи TTL (sec/min/hr) -ро истифода баред, jitter (± 10-20%) -ро пешгирӣ кунед.
- Барои калидҳои гарм - тароват ба пеш ва як парвоз (як навсозии пешво).
- 'allkeys-lru/lfu' is кэши муштарак бе вобастагии TTL.
- 'volatile-lru/lfu' - танҳо калидҳо бо TTL.
- 'noevication' - навиштани нокомӣ аз ҳад зиёд (бехатар барои навбатҳо/ҳисобкунакҳои интиқодӣ).
- Барои скрипт интихоб кунед ва ҳамеша '_ калидҳои хориҷшударо' назорат кунед.
4) Амалиётҳо, қубурҳо ва скриптҳо
Қубурҳо: кам кардани RTT, гурӯҳҳои 10-100.
Амалиётҳо (MULTI/EXEC) - Хонданро ҷудо накунед, балки партияро атомӣ иҷро кунед.
Қулфи оптималӣ: 'Калиди WATCH' → MULTI/EXEC → санҷед.
Скриптҳои Луа: мантиқи атомӣ дар тарафи сервер (маҳдудияти нархҳо, қуфлҳо, амалиёти таркибӣ).
5) Навбатҳо ва автобусҳо: Рӯйхат vs Stream
Рӯйхат + 'BRPOP' - оддӣ, аммо ягон гурӯҳи истеъмолкунандагон, ҷуброн/такрорӣ, муқовимати заиф ба қатраҳо.
Ҷараён: 'XADD → XREADGROUP → XACK', retry-deadletter (дар дақиқаҳои N гирифта намешавад), тақсимот аз рӯи калид. Барои webhooks PSP/KYC тавсия дода мешавад, пардохтҳо/огоҳиҳои таъхиршуда.
Навбати афзалиятнок: якчанд ҷараёнҳо аз рӯи афзалият, истеъмолкунандагон дар ҷои аввал аз баландӣ "ғарқ мешаванд".
Вазифаҳои ба таъхир афтода: ZS et, ки дар он хол = вақт; даврии 'ZRANGEBYSCORE' ҳоло → ба Stream интиқол дода шудааст.
6) Дастрасии баланд ва миқёс
Нусхабардорӣ: усто → нусхабардорӣ (миқёси хондан).
Sentinel: устои нокомии автоматӣ, кашф, муштарии URI.
Кластери Редис: 16384-слот, миқёси уфуқӣ. Калидҳои печондан, ки сохторҳои гуногунро дар '{фармоиш: 123}' барчаспҳои hash истифода мебаранд.
- Барои кэш/ҷаласаҳо - кластер/реплика, 'hashing-side' SDK дастгирӣ карда мешавад.
- Барои навбатҳо/ҷараёнҳо - амалиётҳои салибро кам кунед; қисмбандӣ аз рӯи калидҳои домейн.
7) Истодагарӣ: RDB, AOF ва нусхаҳои эҳтиётӣ
RDB (лаҳзаҳо): тезтар, сарфакорона; хатари аз даст додани сонияҳо/дақиқаҳои охир.
AOF (маҷалла): талафоти камтар; режими 'everysec/ҳамеша'. Фишурдани AOF ва такрории даврӣ.
Гибрид: RDB + AOF → барқароркунии зуд + талафоти мӯътадил.
Нусхабардорӣ: лаҳзаҳо ва нусхаҳои AOF ба нигаҳдории объект; мунтазам барқароршавиро тафтиш кунед.
Барои навбати интиқодӣ/номутобиқатӣ, нусхаи AOF 'everysec' + -ро интихоб кунед.
8) Бехатарӣ ва риояи
AUTH/ACL: нақшҳо дар як барнома, манъи фармонҳои "хатарнок" ('FLUSHALL,' KEYS ').
TLS ба пайвандҳои муштарӣ-сервер ва байни гиреҳҳо; собит egress-IP.
Ҷудосозии шабака: зершабақаҳои хусусӣ, SG/NACL; дастрасӣ танҳо аз хидматҳои зарурӣ/фазои номҳо.
Асрори сабти ном нашавед; PAN/PII дар Редис - танҳо нишонаҳо/ҳосилаҳо.
Фармонҳои асосӣ: 'KEYS' -ро пешгирӣ кунед - 'SCAN' -ро истифода баред.
9) Мушоҳида ва SLO
Ченакҳои асосӣ:- Таъхир (P95/P99), 'фаврӣ _ ops _ per _ sec', 'connected _ мизоҷон'.
- Таносуби хит, evicted_keys, expired_keys.
- Хотира: истифодашуда, таносуби фрагментатсия, RSS, статистикаи тақсимкунанда.
- Ақибмонии такрорӣ, басомадҳо ва андозаҳои AOF/RDB, вақти ғилоф.
- Ҷараёнҳо: PEL (рӯйхати вурудоти интизорӣ), таъхири интиқол, ҳисобкунии такрорӣ.
- Амалиёти Redis P99 ≤ 5-10 мс.
- Кӯчонидани ≤ 1 %/соат (фазои кэш).
- Таҳвили ҷараён P99 ≤ 500 мс, меъёри такрорӣ <2%.
10) Финҳо ва банақшагирии захираҳо
Хотира гарон аст: андозагирии $/GB-моҳ RAM vs сарфаи дархостҳо ба пайдоиш/DB.
Даргиронидани фишурдасозии арзиш> 1-2 КБ (ниг. CPU).
LFU метавонад зарбаи беҳтарро бо ҳаҷми камтар диҳад.
Барои тасвирҳо/блобҳои калон - на Редис: CDN + нигоҳдории объектро истифода баред.
11) Намунаҳо барои IGaming/fintech
11. 1 Меъёри маҳдудкунӣ (Луа)
Идея: 'INCRBY' дар калиди тиреза + TTL; Луа атомиро санҷида, меафзояд.
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 idempotence дархост
Калиди 'idemp: {request _ id}' бо TTL 24h, арзиш - натиҷа/ҳолат. Пеш аз анҷом додани амалиёт, мо ҳузури худро тафтиш мекунем.
11. 3 Пешсафон
'Пешсафи ZINCRBY: бозӣ: {g} истифодабарандаи хол: {u}' → 'ZREVRANGE... WITSCORES '.
Барои N боло аз рӯи минтақа/иҷорагир - ZS-и инфиродӣ ё префиксҳо.
11. 4 PSP Webhooks Queue
'XADD psp: webhooks... '→ гурӯҳи истеъмолкунандагон' XGROUP CREATE psp: webhooks g1 $ '.
Кашидани паёмҳои "часпида" тавассути сканкунии PEL ('XPENDING' → 'XCLAIM').
11. 5 Пардохтҳои таъхиршуда
ZSet 'payout: вобаста ба' (хол = давра) → коргар давра ба давра ашёҳои тайёрро ба Stream 'payout: exec' бо такрорӣ интиқол медиҳад.
11. 6 метри Антифрауд
Омезиши барчаспҳои 'PFADD' (беназир) + 'INCR' (шиддат) + geo/ASN; триггерҳо барои тасдиқи дастӣ.
12) Кор бо хотира ва иҷро
Ҳавзҳои пайвасти муштарӣ; кам кардани РТТ (зинда мондан).
Қубурҳоро ба бастаи фармонҳо бартарӣ диҳед.
Калидҳои калонро тамошо кунед ('MEMORY USAGE', 'SCAN') - тақсим кардани объектҳо беҳтар аст.
Ҳаш бо шумораи ками майдонҳо нисбат ба бисёр калидҳои инфиродӣ сарфакорона аст.
Агар фоида бо санҷишҳо тасдиқ карда шавад, io-риштаҳоро (хонед-вазнин) фаъол созед.
Дар prod зуд-зуд 'FLUSHDB/ALL' пешгирӣ кунед; тавассути префиксҳо ва 'UNLINK' барои нест кардани бехатар идора карда мешавад.
13) Иҷорагир ва ҷудокунӣ
Кластерҳо/мавридҳои инфиродӣ ё DB мантиқӣ барои як иҷорагир (агар сарборӣ хурд бошад).
Квотаҳои калидӣ/хотира, тақсимоти ACL.
Префиксҳо дар калидҳо ва ченакҳо аз рӯи фазои ном.
14) Қулф ва пайдарҳамӣ
SET калиди val NX PX = ttl - мутексияи оддӣ.
Redlock: бодиққат истифода баред; барои муомилоти танқидии тақсимшуда беҳтар аст, ки ба "манбаи ҳақиқат" (DB/китобча) ва амалиёти бемаънӣ такя кунед.
Амалиёти атомӣ ва Луаро ба ҷои қуфлҳои "дароз" бартарӣ диҳед.
15) Анти-намунаҳо
Нигоҳдории блобҳои калон/тасвирҳо - изофабори RAM ва шабакаҳо.
Инвариантҳои молиявӣ (тавозун) танҳо дар Редис.
'Калидҳо' ва 'сканер кардани ҷаҳон' дар prod.
Не TTL/jitter - dogpile ҳангоми ба охир расидани мӯҳлат.
Сиёсати "allkey-" оид ба навбатҳои интиқодӣ → аз даст додани маълумот ҳангоми фишор.
Омезиши навбатҳо, кэш ва сессияҳо дар як ҳолат бидуни квота ва афзалиятҳо.
Луа скриптҳоеро, ки дар калидҳои слотҳои гуногун дар Кластер кор мекунанд.
16) Рӯйхати санҷиши амалисозӣ
1. Нақшҳоро муайян кунед: кэш/сеанс, навбатҳо/ҷараёнҳо, ҳисобкунакҳо/маҳдудиятҳо - ба намунаҳо/кластерҳо ҷойгир кунед.
2. Барои вазифа maxmemory-сиёсатро интихоб кунед; маҳдудиятҳо ва кӯчонидани мониторингро муқаррар кунед.
3. Номи калидӣ, версияҳои ноҳиявӣ, матритсаи TTL + jitter; як парвоз барои калидҳои боло.
4. Барои навбатҳо - Ҷараёнҳо (гурӯҳҳо, бозпас, DLQ), барои таъхир - ZS et + интиқол.
5. HA: нусхабардорӣ + Кластери Сентинел ё Редис; нокомии муштариро тафтиш кунед.
6. Истодагарӣ: RDB/AOF таҳти скрипт; нусхаҳои эҳтиётии мунтазам ва санҷиши барқароршавӣ.
7. Амният: ACL, TLS, шабакаҳои хусусӣ, манъи фармонҳои хатарнок.
8. Мушоҳида: ниҳонӣ, ops/sec, хотира, кӯчдиҳӣ, ақибмонии такрорӣ, ҷараёни PEL.
9. FIN Ops: профилҳои хотира, калидҳои калон, фишурдасозӣ, LFU; барои Redis барои blobs калон пешгирӣ кунед.
10. Ҳуҷҷатҳои намунавӣ (меъёри маҳдудият, номутобиқатӣ, пешсафӣ) ва санҷишҳои сарборӣ.
Натиҷа
Редис "корди бисёрфунксионалии Швейтсария" -и суръат аст: кэш, навбат, ҳисобкунакҳо, тахтачаҳо, гео ва сохторҳои эҳтимолӣ. Қувваи он дар интихоби дурусти сохторҳои маълумот, интизоми TTL/маъюбӣ, атомии амалиёт ва HA/суботкорӣ ва мушоҳидаҳои хуб андешидашуда вобаста аст. Redis-ро истифода баред, ки дар он миллисекундҳо ва RPS-и баланд муҳиманд, дар ҳоле ки инвариантҳои муҳим (пул, баҳисобгирӣ) -ро ба "манбаи ҳақиқат" мегузоранд - бо ин роҳ платформа ҳам зуд ва ҳам боэътимод боқӣ хоҳад монд.