GH GambleHub

Меъмории кэш: Редис, Мемкач

Меъмории кэш: Редис, Мемкач

1) Кай ва чаро кэш

Ҳадафҳо: кам кардани таъхир, боркунии DB/PSP/API-ҳои беруна ва қуллаҳои сабуккунанда.
Қабатҳои кэш аксар вақт бисёрсатҳа мебошанд: дар ҷараёни (L1) → сатҳи хидматрасонӣ (Redis/Memcached L2) → канори/CDN. Кэши дохилӣ хониши гармро суръат мебахшад, L2 барои хидматҳо маъмул аст, канор барои мундариҷаи ҷамъиятӣ.

2) Редис vs Мемкач - мухтасар

МеъёриРедисMemcached
Намудҳои маълумотСатрҳо, хэшҳо, рӯйхатҳо, маҷмӯаҳо, зсет, битмапс, HyperКалиди арзиш (сатрҳо)
ИстодагарӣAOF/RDB, no-fsync-талафот ҳангоми конфигуратсияНе, ин тавр нест
КластерКластери Редис (якбора, нокомӣ )/СентинелМуштарӣ shard, ҳеҷ нокомии маҳаллӣ
Амалиётҳо/скриптҳоMULTI/EXEC, EVAL (Lua), амалиёти атомӣНе, ин тавр нест
TTL/хориҷшавӣСиёсати танзими ҷаримаАсосӣ
Пинҳонӣ/хотираКаме болотарХеле сабук, пешгӯишаванда

Қоида: агар ба шумо сохтори мураккаби маълумот лозим бошад, суботкорӣ, паб/зер/ҷараён/скриптҳо - Редисро гиред. Агар қабати кэши супер содда, зуд ва арзон бидуни пойдорӣ Memcached бошад.

3) Шакли кэш

3. 1 Кэш-канор (танбалӣ)

Дар ариза аз кэш → як пазмон → хонда мешавад аз махзани маълумотҳо → онро дар кэш бо TTL мегузорад.

Назорати оддии TTL, мустақилияти кэш. − Дар сурати пазмон шудан "тӯфон" имконпазир аст.

3. 2 Хондан

Худи муштарӣ/прокси ҳангоми пазмон шудан аз ибтидо даст кашида, онро ба кэш мегузорад.

Мантиқи мутамарказ. − Инфрасохтори мураккаб.

3. 3 Навиштан/Навиштан-пушти

Навиштан: аввал ба кэш навиштан, баъд ба махзани маълумот.
Навиштан: навиштан ба навбат, дурахши асинхронӣ дар пойгоҳи додаҳо (талафоти эҳтимолӣ ҳангоми садама - ба шумо сабти ном лозим аст).

3. 4 Ду сатҳ (L1 + L2)

L1 (дар ҷараён) бо TTL кӯтоҳ ва TTL мулоим, L2 (Redis/Memcached) - "ҳақиқати кэш. "Маъюбӣ тавассути паб/зер.

4) TTL, тӯфонҳо ва пайдарҳамӣ

TTL-Set ба басомади тағирёбии маълумот наздик аст. Барои калидҳои гарм, TTL (jitter) тасодуфиро истифода баред: 'ttl = base ± rand (0.. базаи 0. 1) '- хуруҷи синхрониро хориҷ мекунад.

Dogpile (галаи раъд): пазмонҳоро муҳофизат кунед:
  • Singleflight: танҳо як раванд арзиши онро барзиёд иҷро мекунад (нигаред ба мисоли Луа).
  • Soft-TTL + навсозии замина: пас аз 'soft _ ttl', онро кӯҳна ва бо замина навсозӣ кунед.
  • Semaphore/lock: 'Калиди SET: арзиши қулф NX PX = 2000'.
  • Наздиктарин кӯҳна: 'кӯҳна-дар ҳоле ки-таҷдиди назар' барои посухи API (нигаред ба фасли 8).

5) Калидҳо, фазои номҳо, сериализатсия

5. 1 Номи калидӣ

Қолиб: '{домен}: {объект}: {id}: {field}'

Намунаҳо:
  • 'user: профил: 42' 'каталог: маҳсулот: 1001: v2' 'psp: нархҳо: 2025-11-03'

Нусхаи схемаро илова кунед (': v2') - ин маъюбии оммавиро осон мекунад.

5. 2 Neimspaces тавассути "версияи кайҳон"

Калиди 'ns: каталог = 17' -ро нигоҳ доред. Калидҳои воқеӣ: 'каталог: 17: маҳсулот: 1001'. Барои маъюбии феҳристи ҷаҳонӣ, танҳо афзоиш додани 'ns: каталог'.

5. 3 Сериализатсия/фишурдасозӣ

JSON қулай, аммо вазнин аст. Истифода баред Message- pack/CBOR.
Даргиронидани фишурдасозӣ (LZ4/ZSTD) барои боркунии калон (> 1-2 КБ). Дар Редис - дар тарафи мизоҷ.

6) Калидҳои гарм ва sharding

Калидҳои гарм: Назорат кардани боло-N бо хит/пазмон/байт. Барои калидҳои ниҳоят гарм:
  • Намунаи хониши такрорӣ: арзишро дар якчанд калидҳои shard нусхабардорӣ кунед: k: 1.. N ', ҳангоми хондан тасодуфӣ интихоб кунед.
  • L1 маҳаллӣ: Раванди обуна дар бораи маълулиятро дар хотир доред.
Шаршара:
  • Кластери Редис - модарӣ (16384 ҷойҳои ҳаш).
  • Memcached як hash пайваста муштарӣ аст.
  • Hash-tag дар Redis '{...}' слотро барои маҷмӯи калидҳо ислоҳ мекунад: 'корбар: {42}: profile' and 'user: {42}: limits' дар ҳамон корт хоҳад буд.

7) Сиёсатҳо ва андозаҳои пешакӣ

Редис 'maxmemory-policy': 'allkeys-lru', 'ноустувор-лру', 'allkeys-lfu', 'noeviction' i. д. Барои кэш, одатан 'allkeys-lru '/' allkeys-lfu'.
Memcached - LRU на-плита.
Андоза ва қиммати калид: андозаи максимумро тамошо кунед (Бо нобаёнӣ 1 МБ, плитаи танзим).
Зиёда аз хотира бояд пешгӯишаванда таназзул ёбад: на 'noeviction' дар роҳи фаъол.

Redis config (порча):

maxmemory 32gb maxmemory-policy allkeys-lfu hz 50 tcp-keepalive 60

8) Намунаҳои муҳофизати тӯфон - Рамз

8. 1 Редис Луа singleflight (псевдо)

lua
-- KEYS[1] = data_key, KEYS[2] = lock_key
-- ARGV[1] = now_ms, ARGV[2] = soft_ttl_ms, ARGV[3] = hard_ttl_ms, ARGV[4] = lock_ttl_ms local payload = redis. call("GET", KEYS[1])
if payload then local meta = redis. call("HGETALL", KEYS[1].. ":meta")
local last = tonumber(meta[2] or "0")
if tonumber(ARGV[1]) - last < tonumber(ARGV[2]) then return { "HIT", payload }
end if redis. call ("SET," KEYS [2], "1," "NX," "PX," ARGV [4]) then return {"REFRESH," payload} - one worker updates, the rest give stale end return {"STALE," payload}
end if redis. call("SET", KEYS[2], "1", "NX", "PX", ARGV[4]) then return { "MISS", nil }
end return { "BUSY", nil }

8. 2 Гиреҳ. js кэш-ҷудо (соддакардашуда)

js const v = await redis. get(key);
if (v) return decode(v);
const lock = await redis. setNX(key+":lock", "1", { PX: 1500 });
if (lock) {
const fresh = await loadFromDB(id);
await redis. set(key, encode(fresh), { EX: ttl, NX: false });
await redis. del(key+":lock");
return fresh;
} else {
await sleep(60);           // short backoff const retry = await redis. get (key) ;//give someone's already filled return decode (retry);
}

9) маъюбӣ ва ҳамбастагӣ

Аз рӯи ҳодиса: Ҳангоми тағир додан дар пойгоҳи додаҳо, 'pub/sub' ҳодиса '-ро беэътибор кунед: {ns}: {id}' → муштариён калидҳоро нест мекунанд.
Вақтсанҷ: TTL кӯтоҳ барои тағир додани маълумот.
Версия: ба калидҳои 'ns:' нигаред.
Outbox: кафолати расонидани маълулият (рӯйдод/мавзӯъ, ретрай).
Idempotency амалиёти кэш: истифодаи 'SETXX/SETNX', версияҳо ('etag') ва майдонҳои ҳэш барои афзоиш.

10) Такрор, кластер, ноком

10. 1 Редис

Sentinel: автоматикии нокомии мастер-реплика (state

Кластер: sharding + нокомии худкор; мизоҷон бояд масирҳои 'MOVED/ASK' -ро дастгирӣ кунанд.
AOF/RDB: барои кэш одатан 'appendfsync everysec', бидуни субот имконпазир аст (ба монанди кэши тоза).

10. 2 Memcached

Ягон нусха аз қуттӣ нест. Эътимоднокӣ - тавассути сервери сервер + repeat 'n' (муштарӣ-тараф).
Вақте ки гиреҳҳо меафтанд, пазмонҳо ва "бозомӯзии" кэш зиёд мешаванд.

10. 3 K8s ва Шабака

Redis/Memcached ба барқароршавии зуд-зуд подкастҳо маъқул нест; Антиподҳои Statfiely-Set + AZ-ро истифода баред, собит PVC/POD IP.

Танзими Poddisruptions ва Topology

11) Амалиётҳо, скриптҳо ва атомӣ (Редис)

INCR/DECR, HINCRBY - ҳисобкунакҳо, квотаҳо, меъёрҳо (танҳо ба назар гиред).
MULTI/EXEC - бастаи фармонҳои атомӣ.
Луа (EVAL) - бидуни мусобиқа хондан-тағир додан-навиштан.
Қубур - РТТ-ро коҳиш медиҳад (хусусан дар хопҳои шабакавӣ).

Намунаи меъёри маҳдудият (сатили токен, соддакардашуда):
lua
-- KEYS[1]=bucket, ARGV[1]=capacity, ARGV[2]=refill_rate_per_sec, ARGV[3]=now_ms
-- Returns 1 if the token is issued, otherwise 0

12) Навбатҳо, паб/зер ва ҷараёнҳо (Редис)

Pub/Sub: маъюбӣ, сигналҳо. Не наҷот, танҳо шунавандагони онлайн.
Ҷараёнҳо: Рӯйдодҳои тасдиқи рӯйдодҳо (ACK), Гурӯҳи истеъмолкунандагон, Retrai - барои навиштан-пушти/мухлиси ашаддӣ.
Рӯйхатҳо ('BRPOP'): навбатҳои оддӣ.
Редисро ҳамчун "автобуси ягонаи ҳама чиз" бидуни нусхабардорӣ истифода набаред - ин кэш/автобуси тез аст, на Кафка.

13) Амният ва дастрасӣ

Ҷудокунии шабака/VPC, MTLS дар сатҳи воридшавӣ, ACL/паролҳо ('талабот '/ACL дар Редис 6 +).
Фармонҳои хатарнокро дар Редис ('CONFIG', 'FLUSHALL', 'KEYS') тавассути ACL хомӯш кунед.
Барои Memcached - интерфейсҳои ҷамъиятиро гӯш накунед, '-U 0' (бе UDP), танҳо шабакаҳои хусусӣ.
PII-ро нигоҳ надоред; агар лозим бошад - рамзгузории кӯтоҳ TTL + дар сатҳи барнома.

14) Риоя ва нигоҳдорӣ

Ченакҳои асосӣ:
  • Таносуби хит/Таносуби мисс (аз рӯи фазо/масир).
  • Фармонҳои таъхири p95/p99 'GET/SET/MGET', танаффус.
  • Хориҷ кардани хатогиҳои OOM.
  • Қафои такрорӣ (Редис), ҳолати кластерӣ, рӯйдодҳои муҳоҷират/барқарорсозӣ.
  • Калидҳои Top-N аз рӯи трафик/байтҳо (интихоб).
  • Гузоришҳо: фармонҳои суст ('slowlog'), хатогиҳои шабака.
  • Панели панелҳо: умумӣ (CPU/RAM/пайвастҳо), фармонҳо, ҷойҳои кластерӣ, сентинелҳо, ки аз содиркунандагони Prometheus мегузаранд.

15) Конфигуратсияҳо ва ҷойгиркунӣ - намунаҳо

15. 1 Редис Сентинел (порча)


port 6379 protected-mode yes appendonly yes appendfsync everysec maxmemory-policy allkeys-lfu
'sentinel. conf ':

sentinel monitor m1 10. 0. 0. 11 6379 2 sentinel auth-pass m1 sentinel down-after-milliseconds m1 5000 sentinel failover-timeout m1 60000

15. 2 Кластери Редис (арзишҳои чарх, соддакардашуда)

yaml cluster:
enabled: true nodes: 6  # 3 masters + 3 replicas persistence:
size: 100Gi resources:
requests: { cpu: "500m", memory: "2Gi" }

15. 3 Memcached (ҷойгиркунӣ)

yaml containers:
- image: memcached:1. 6 args: ["-m", "32768", "-I", "2m", "-v", "-t", "8", "-o", "modern"]
ports: [{ containerPort: 11211 }]

15. 4 NGINX ҳамчун прокси хондан (ҳалқаи API)

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api:100m max_size=10g inactive=10m;
map $request_uri $cache_key { default "api:$request_uri"; }
location /api/ {
proxy_cache api;
proxy_cache_valid 200 1m;
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;
proxy_cache_lock on;      # singleflight на уровне NGINX proxy_cache_key $cache_key;
proxy_pass http://backend;
}

16) Санҷиш ва дарвозаҳо

Профилҳои сарбории кэши хунук/гарм/гарм.
Тазриқи пазмонҳо (тозакунӣ) - пайдоиш бояд ба "бозомӯзӣ" тоб оварад.
Ҳушдорҳо: якбора паст шудани таносуби хит, болоравии таъхири пазмон, тармаи кӯчдиҳӣ, болоравии танаффус.

17) Анти-намунаҳо

"Ҳақиқат" -ро дар Редис бидуни AOF/RDB ва бидуни ихтисор нигоҳ доред.
TTL = 0 (ҷовидона) барои маълумоти идоранашаванда → номутобиқатии доимӣ.
Массаи 'KEYS' in prod.
Набудани jitter/soft-TTL → қатъшавии синхронӣ ва тӯфонҳо.
Як мисол барои ҳамаи фармонҳо бе shardings/replicas.
Барои супоришҳое, ки атомият/скриптҳоро талаб мекунанд, Memcached-ро истифода баред.

18) Рӯйхати назорати амалисозӣ (0-45 рӯз)

0-10 рӯз

Қолибро интихоб кунед (кэш-канор + L1/L2), калидҳо, TTL, фазои номро тавсиф кунед.
Фаъол кардани jitter/soft-TTL, singleflight; огоҳиҳои асосӣ/панели панелҳо.
Барои Redis - ACL-ро танзим кунед, режими ҳифзшаванда, slowlog, maxmemory-policy.

11-25 рӯз

Гузариш ба sharding (Redis Cluster ё hash муштарӣ), нусхаҳо.
Маъюбӣ тавассути версияи паб/зер ё neimspace; outbox дар пойгоҳи додаҳо.
Санҷиши сарбории кэш "бозомӯзӣ"; маҳдудияти пайдоиш.

26-45 рӯз

Autopromo/canary TTL, пеш аз озод шудан гарм кунед.
Ҷараёнҳо барои аз нав сабт кардани пасзамина/пасзамина.
Ҳисоботҳои ҳафтаина дар бораи таносуби хит, калидҳои боло, арзиши хотира.

19) Нишондиҳандаҳои камолот

Хит-таносуби L2 ≥ 80% (омор дар масирҳо/фазои номҳо).
P95 GET <2-3 ms (in-DC), аз даст медиҳад <пайдоиши SLO.
0 тӯфон дар маълулияти оммавӣ (бо санҷишҳо исбот шудааст).
Маъюбии худкор ва версияи nymspace.
Sharding/replication 1 нокомии гиреҳро бидуни таназзули назаррас фаро мегирад.

20) Хулоса

Архитектураи қавии кэш интизоми калидҳо ва TTL, муҳофизати тӯфон, дурустии дуруст ва пешгӯи пешгӯишаванда мебошад. Редис семантикаи бой, суботкорӣ ва атомиро медиҳад; Memcached - ҳадди аксар содда ва суръат. Илова кардани мушоҳида, маъюбии ҳодиса, L1 + L2 ва кэш ба суръатбахшии платформа табдил меёбад, на манбаи қатраҳои тасодуфӣ ва иштибоҳҳои "мистикӣ".

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Telegram
@Gamble_GC
Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.