Logo GH

Տեխնոլոգիաներ և ենթակառուցվածքներ Windows Redis: in-memory լուծումներ

Redis: in-memory լուծումներ

1) Որտե՞ ղ է Redis-ը տեղավորվում

Redis-ը բարձր արագընթաց in-memory պահեստն է, որն ունի տվյալների հարուստ կառուցվածքներ։ Տիպիկ սցենարներ

Քեշ (read-through/aside, TTL, SWR) և նստաշրջաններ։

Հաշվիչներ և քվոտաներ ՝ rate limiting, հակաֆրոդ, քարոզարշավի սահմաններ։

Առաջնորդներ/վարկանիշներ (ZSet), «լավագույն N» առաջարկությունները։

Իրադարձությունների հերթերը/անվադողերը (Streams/PubSub), box/inbox, retray։

Idempotenty (TTL), de-dup webhuks։

Geo (մոտակա կետերի որոնում), Bitmap (դրոշներ, DAU)։

Կեղծանունները/հոսանքները և հեղինակային իրավունքի կարճ քեշները։

💡 Կարևոր է, որ Redis-ի դրամական հավասարակշռությունների և քննադատական ինվարիատորների համար օգտագործվում են միայն որպես ընթերցանության արագացուցիչ կամ ամսագիր/պարբերագիր '«ճշմարտության աղբյուրի» հետ SDD/ledger-ում։

2) Տվյալների կառուցվածքները և երբ դրանք կիրառվեն

String: Արժեքներ/հաշվիչներ («INCRBY»), գաղափարական բանալիներ։

Hash: 105/եզրերի ագրեգատները, «թեթև» օբյեկտների պահպանումը։

List: պարզ գծեր (բայց առանց replay/www.set-semantics)։

Տե՛ ս ՝ յուրահատուկ տարրեր, դեդուպլիկացիա։

ZSet: (առաջնորդները, TTL օրացույցը «հետաձգված» իրադարձություններ են)։

Stream: Կայուն գծեր սպառողական խմբերի հետ, «XREADGROUP »/replay - webhuks, CDC, retrav։

Geo: «GEOADD/GEORADIUS» - մոտակա կետերը/մերչանտները։

Bitmap/Bitfield: մի շարք դրոշներ (տրամաբանություններ, DAU/WAU)։

HyperLogLog: մոտավոր յուրահատուկ (UU) հիշողության էժան։

Bloom/Cuckoo (մոդուլներ) 'արագ առկայության ստուգումներ, նվազեցնում են MISS-ը աղբյուրին։

Մոդուլները

RedisJSON (JSON փաստաթղթեր), RediSearch (ինդեքսավորում/որոնում), RedisBloom (հավանական կառուցվածքներ), Direct Series (չափումներ/միավորումներ)։

3) Բանալիներ, TTL և հիշողության քաղաքականություն

Նեյմինգը և սեգմենացիան


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

Տարբերեք («vN»), միացրեք միայն նշանակալի չափումները (տարածաշրջանը/արժույթը/լեզուն/տենանտ)։

Իզոլիրացրեք տարածությունները www.per-ten.ru։

TTL և «թարմ»

Օգտագործեք TTL մատրիցը (վայրկյան/րոպե/ժամ), ավելացրեք ջիտտերը (10-20%) սթամեդից խուսափելու համար։

Տաք կոմպոզիցիաների համար 'refresh-ahead և single-flight (մեկ առաջնորդը նորարարում է)։

Հեռացման քաղաքականությունը (maxmemory-policy)

«alkeys-lru/lfu» - ընդհանուր կեշ առանց TTL կախվածության։

«volatile-lru/lfu» - միայն TTL-ի բանալիները։

«wwww.eviction» - հալման ժամանակ ձայնագրման մերժումը (ավելի անվտանգ է կրիտիկական հերթերի/հաշվիչների համար)։

Ընտրել սցենարի տակ և միշտ վերահսկել «evicted _ keys»։

4) Գործարքներ, փամփուշտներ և ջութակներ

Դելպլինները 'նվազեցնում են RTT, խմբավորում 10-100 թիմեր։

Գործարքները (MMS I/EXEC) չեն մաքրում ընթերցումները, բայց ատոմային կերպով կատարում են փաթեթը։

Optimistic systeking: «WATCH key» -ը մեջբերում է «MMS I/EXEC» -ի ստուգումը։

Lua-ջութակները 'ատոմային տրամաբանությունը սերվերի կողմում (rate limit, winks, composite վիրահատություններ)։

💡 Redis Lua-ջութակները լավ են, Cluster-ում, համոզվեք, որ բոլոր բանալիները ընկնում են մեկ ծանր սլոտի մեջ (hash-teg 'd... +)։

5) Գծեր և անվադողեր ՝ List vs Stream

List + «BRPOP» -ը պարզ է, բայց չկա consumer consumps, www.set/replay, անկման թույլ դիմադրություն։

STREAM: «XADD no XREADGROUP no XACK», retry-deadletter (չհամաձայնեցված N րոպեների ընթացքում), բանալին։ Առաջարկվում է PFC/KYC-ի webhuks-ի համար, որոնք հետաձգվել են/ծանուցում։

Առաջնահերթությունները 'մի քանի սթրիմներ գերակայություններում, սպառողները առաջին հերթին «դուրս են հանում»։

Հետաձգված առաջադրանքները 'ZSet որտեղ score = timestamp; պարբերական 'ZRANGEBYSCORE' now-ը հաստատեց Stream տեղափոխումը։

6) Բարձր հասանելիություն և մեծացում

Կրկնօրինակումը 'wwww.replica (read-scale)։

Sentinel: ավտոմատ failover proter 'a, հայտնաբերումը, հաճախորդների URI-ը։

Redis Cluster: Harding 16384, հորիզոնական scale-out։ Մի քանի կառուցվածքներ օգտագործող բանալիները հավաստիացրեք ծանր թեգերի մեջ '+ order: 123 +։

Patterns

Քեշի/նստաշրջանի համար 'կլաստեր/կրկնօրինակներ, «client-side hashing» -ը աջակցվում է SDK-ի կողմից։

Հերթերի/սթրիմների համար 'նվազագույնի հասցրեք քրոսեքսային վիրահատությունները։ անջատեք տիրույթի մասերը։

7) Անձնավորություն ՝ RDB, AOF և bekapps

RDB (նկարներ) 'ավելի արագ, տնտեսական; վերջին վայրկյանների կորստի ռիսկը/րոպե։

AOF (ամսագիր) 'ավելի քիչ ռուսական; ռեժիմները 'everysec/always'։ Սեղմելով AOF-ը և պարբերական փոխպատվաստումը։

Հիբրիդ ՝ RDB + AOF-ն արագ վերականգնում է + չափավոր կորուստները։

Բեքապներ 'AOF պատճենները օբյեկտի պահեստում։ պարբերաբար ստուգեք վերականգնումը։

Քննադատական հերթերի/գաղափարախոսության համար ընտրեք AOF 'everysec' + կրկնօրինակումը։

8) Անվտանգությունն ու համադրումը

AUTH/ACL 'per-հավելվածի դերերը, «վտանգավոր» թիմերի արգելքը («FLUSHALL», «KEYS»)։

TFC-ը հաճախորդի սերվերի և միջգերատեսչական ոսպնյակների վրա։ ֆիքսված 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.

Replanslag, AOF/RDB հաճախականություններ և չափսեր, fork time։

Streams: PEL (pending entries list), delivery latency, retry count.

SLO օրինակներ

Redis P99 վիրահատությունը 5-10 մզ է։

Evictions 241 %/ժամ (քեշ տարածություն)։

Stream delivery P99 ≤ 500 мс, retry rate < 2%.

10) FinOps-ը և ռեսուրսների պլանավորումը

Հիշողությունը 'չափել դոլար/GB-mes RAM-vs խնայողությունները origin/BD-ի համար։

Միացրեք արժեքները> 1-2 KB (տե՛ ս CPU)։

LFU-ն կարող է տալ լավագույն hit ավելի քիչ ժամանակ։

Պատկերների/մեծ բլոբների համար ոչ թե 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 Դիմումների համահեղինակ

Բանալին 'request _ id _ id' s TTL 49h-ից, արժեքը արդյունք/կարգավիճակ է։ Վիրահատությունից առաջ մենք ստուգում ենք ներկայությունը։

11. 3 Առաջնորդներ

`ZINCRBY leaderboard:game:{g} score user:{u}` → `ZREVRANGE... WITHSCORES`.

Լավագույն N-ի համար տարածաշրջանի/tenantu-ը առանձին ZSet-ն է կամ նախածանցերը։

11. 4 Webhuks PBS

"XADD p.ru: webhooks..." XGROUP CREATE p.ru: webhooks g1 դոլար "։

Retrai «կախված» հաղորդագրությունները PEL սկանավորման միջոցով («XPENDING»)։

11. 5 Հետաձգված վճարումներ

ZSet 'payout: due' (score = epoch) worker պարբերաբար տեղափոխում է պատրաստի տարրեր Stream 'payout: exec' edeplication։

11. 6 Հակաֆրոդ հաշվիչներ

«PFADD» (եզակի) + «INCR» (ինտենսիվություն) + geo/ASN-2019; ձեռքի ստուգման գործիքներ։

12) Հիշողության և արտադրողականության հետ աշխատելը

Ռուսական հաճախորդների պուլերը; նվազեցրեք RTT (keep-alive)։

Նախընտրեք թիմերի փաթեթը։

Հետևեք bull keys («MEMORY USAGE», «SCAN») - ավելի լավ է փորձարկել օբյեկտները։

Hash-ը փոքր թվով դաշտեր է, որոնք ավելի տնտեսական են, քան շատ առանձին տարածքներ։

Միացրեք io-threads (read-heavy), եթե պրոֆիլիտը ապացուցված է թեստերով։

Խուսափեք հաճախակի «FLUSHDB/ALA» վաճառքից։ կառավարեք նախածանցների և «UNLINK» -ի միջոցով անվտանգ ինտեգրման համար։

13) Multi-tenant և մեկուսացում

Առանձին կոմպոզիցիաներ/instans կամ logical DB per-tenae (եթե mala)։

Քվոտաները բանալիների/հիշողության վրա, որոնք առանձնացված են ACL-ով։

Preficts-ում և namespace-ում։

14) Systeking-ը և համաձայնությունը

DISKEY val NX PX = tl - պարզ mutex։

Redlock 'օգտագործեք կոկիկ; բաշխված քննադատական գործարքների համար ավելի լավ է ապավինել «ճշմարտության աղբյուրին» (BD/ledger) և գաղափարական վիրահատություններին։

Նախընտրեք ատոմային վիրահատությունները և Lua-ը «երկար» բլոկի փոխարեն։

15) Anti-patterna

Մեծ բլոբների/պատկերների պահպանումը RAM և ցանցերի գերագնահատումն է։

Ֆինանսական ինվարանտները (հավասարակշռությունը) միայն Redis-ում։

«KEYS» և «աշխարհի սկանավորում» վաճառքում։

TTL/ջիթերի բացակայությունը dogpile-ի վրա է։

«Allkeys-» քաղաքականությունը քննադատական հերթերի վրա բացատրում է տվյալների կորուստը ճնշումների ժամանակ։

Հերթերի, կեշի և նստաշրջանների խառնուրդը մեկ ինստանսի մեջ առանց քվոտաների և գերակայությունների։

Lua-ջութակները, որոնք աշխատում են Cluster-ի տարբեր արցունքների բեկորներով։

16)

1. Հիմնական դերերը ՝ քեշ/նստաշրջան, հերթեր/ստրիմա, հաշվիչներ/լիմիտներ, բաժանեք ինստանսի/կլաստերների։

2. Ընտրեք maxmemory-policy առաջադրանքի համար։ տվեք սահմաններ և evictions։

3. Նեյմինգը բացատրում է, սխեմաների տարբերակները, TTL-մատրիցը + ջիտտերը։ single-flight-ը լավագույն մրցույթի համար։

4. Հաջորդների համար 'Streams (խմբեր, retrai, DLQ), հետաձգվածների համար' ZSet + փոխանցումը։

5. HA 'կրկնօրինակումը + Sentinel կամ Redis Cluster; www.failover հաճախորդը։

6. Անձնավորություն ՝ RDB/AOF սցենարի տակ; bekaps և վերականգնման թեստ։

7. Անվտանգությունը ՝ ACL, TSA, մասնավոր ցանցեր, վտանգավոր թիմերի արգելք։

8. Դիտարկումը 'latency, ops/sec, memory, evictions, replanslag, stream PEL։

9. FinOps: հիշողության պրոֆիլներ, մեծ բանալիներ, ագրեսիա, LFU; խուսափեք Redis-ից մեծ բլոբների համար։

10. Patrium (rate-limit, idempotention, առաջնորդներ) և բեռի թեստեր։

Արդյունքը

Redis-ը արագության «բազմաթիվ ֆունկցիոնալ շվեյցարական դանակ» է 'քեշ, հերթեր, հաշվիչներ, առաջնորդներ, գեո և հավանական կառուցվածքներ։ Նրա ուժը տվյալների կառուցվածքների ճիշտ ընտրության մեջ է, TTL/հաշմանդամության կարգապահությունը, վիրահատությունների ատոմականությունը, ինչպես նաև մտածված NA/անձնազոհության և դիտարկման մեջ։ Օգտագործեք Redis-ը այնտեղ, որտեղ միլիսեքսունդները և բարձր RPS-ները կարևոր են, միևնույն ժամանակ թողնելով քննադատական ինվարանտները (փողը, գնորդը) «ճշմարտության աղբյուրը», այնպես որ պլատֆորմը կմնա ինչպես արագ, այնպես էլ հուսալի։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։