GH GambleHub

Kesmek arhitekturasy: Redis, Memcached

Kesmek arhitekturasy: Redis, Memcached

1) Haçan we näme üçin keş

Maksatlar: gizlinligi azaltmak, DB/PSP/daşarky API-leri düşürmek we iň ýokary derejeleri ýumşatmak.
Keshleriň gatlaklary köplenç köp derejeli: in-process (L1) → service-level (Redis/Memcached L2) → edge/CDN. Içerki keş "gyzgyn" okalmagy çaltlaşdyrýar, L2 - hyzmatlar üçin umumy, edge - köpçüligiň mazmuny üçin.

2) Redis vs Memcached - gysgaça

KriterRedisMemcached
Maglumat görnüşleriSetirler, heşler, sanawlar, köplükler, zset, bitmaplar, HyperLogLog, Streams, Bloom/CF (modullar arkaly)Açar (setirler)
DowamlylykAOF/RDB, no-fsync-loss gurlandaÝok
KlasterRedis Cluster (şarding, failover )/SentinelNational failover bolmasa müşderi şard
Amallar/skriptlarMULTI/EXEC, EVAL (Lua), atom amallaryÝok
TTL/evictionSyýasatlary inçe sazlamakEsasy
Gizlinlik/ýatBiraz ýokaryÖrän ýeňil, öňünden aýdyp boljak

Düzgün: Çylşyrymly maglumat gurluşlary, dowamlylygy, pub/sub/akymlary/skriptleri zerur bolsa - Redis alyň. Durability bolmazdan super-ýönekeý, çalt, arzan KV kesh gatlagy - Memcached.

3) Kesmek şablonlary

3. 1 Cache-aside (lazy)

Programma keshden okaýar → sypdyrma → DB-den okaýar → TTL bilen keshde goýýar.

TTL-e aňsat gözegçilik etmek, keshden garaşsyzlyk. − sypdyrylanda "tupan" bolup biler.

3. 2 Read-through

Müşderiniň/proksiniň özi sypdyrylanda originden çykaryp, kese salýar.

Merkezleşdirilen logika. − Has çylşyrymly infrastruktura.

3. 3 Write-through / Write-behind

Write-through: Ilki kese, soň DB-e ýazyň.
Write-behind: nobata ýazmak, DB-de asinhron fleş (has owadan bolanda potensial ýitgi - magazineurnal gerek).

3. 4 Two-tier (L1+L2)

L1 (in-process) gysga TTL we soft TTL, L2 (Redis/Memcached) - "keshiň hakykaty". pub/sub arkaly maýyplyk.

4) TTL, tupan we yzygiderlilik

TTL: Maglumatlary üýtgetmek ýygylygyna ýakynlaşyň. Gyzgyn açarlar üçin TTL (jitter) randomizasiýasyny ulanyň: 'ttl = base ± rand (0.. base0. 1) '- sinhron akymlary aýyrýar.

Dogpile (thundering herd): ýalňyşlyklary goraň:
  • Singleflight: diňe bir amal manyny üýtgeder (Lua mysalyna serediň).
  • Soft-TTL + background refresh: 'soft _ ttl' -den soň köne (stale) beriň we fon bilen täzeläň.
  • Semaphore/lock: `SET key:lock value NX PX=2000`.
  • API jogaplary üçin Near-stale: 'stale-while-revalidate' (8-nji bölüme serediň).

5) Açarlar, alamatlar, serializasiýa

5. 1 Açarlary atlandyrmak

Şablon: '{domain}: {entity}: {id}: {field}'

Mysal üçin:
  • `user:profile:42` `catalog:product:1001:v2` `psp:rates:2025-11-03`

Shemanyň wersiýasyny goşuň (': v2') - bu köpçülikleýin maýyplygy ýeňilleşdirýär.

5. 2 "Giňişlik wersiýasy" arkaly nyşanlar

Açary saklaň 'ns: catalog = 17'. Hakyky açarlar: 'catalog: 17: product: 1001'. Katalogyň global maýyplygy üçin diňe 'ns: catalog' -y ulanyň.

5. 3 Serial/gysyş

JSON - amatly, ýöne agyr. MessagePack/CBOR ulanyň.
Uly LZ4/ZSTD üçin gysyşy açyň (> 1-2 KB). Redisde - müşderiniň tarapynda.

6) Gyzgyn açarlar we şardlamak

Hot-keys: hit/miss/byte boýunça top-N-e gözegçilik ediň. Örän gyzgyn açarlar üçin:
  • Replicated read pattern: 'hot: k: 1.. N' birnäçe shard açarlaryna goşuň, okanyňyzda tötänleýin saýlaň.
  • Local L1: maýyplyga ýazylmak bilen prosesi ýatda saklaň.
Şardlamak:
  • Redis Cluster - native (16384 hash-slot).
  • Memcached - müşderi konsistent heşi.
  • Redisdäki hash-tag '{...}' açar slaýdyny düzedýär: 'user: {42}: profile' и 'user: {42}: limits' bir çarçuwada düşer.

7) Çalyşmak syýasaty we ölçegleri

Redis `maxmemory-policy`: `allkeys-lru`, `volatile-lru`, `allkeys-lfu`, `noeviction` и т. д. Kesh üçin 'allkeys-lru '/' allkeys-lfu'.
Memcached — LRU на item-slab.
Açaryň ululygy we bahasy: max item size gözegçilik ediň (1 MB standart Memcached, slab sazlamasy).
Ýadyň artykmaçlygy öňünden çaklanyp bilinmez: 'noeviction' işjeň ýolda.

Redis (bölek):

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

8) Tupandan goramak patternleri - kod

8. 1 Redis Lua singleflight (psevdo)

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 Node. js cache-aside

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) Maýyplyk we ylalaşyklylyk

Waka boýunça: DB üýtgedeniňizde 'pub/sub' wakasyny 'invalidate: {ns}: {id}' → abonentler açarlary pozýarlar.
Taýmer boýunça: ýygy-ýygydan üýtgeýän maglumatlar üçin gysga TTL.
Wersiýa: 'ns:' açarlaryna serediň.
Outbox: maýyplygy eltmegiň kepilligi (log/topik, retraide waka).
Kesh bilen amallaryň gidempotentligi: 'SETXX/SETNX', wersiýalary ('etag') we inkrement üçin kesh meýdançalaryny ulanyň.

10) Replikasiýa, klaster, jenaýatçy

10. 1 Redis

Sentinel: awtomatiki failover master-replica (stateFUL IP/ady).
Kluster: şardlamak + awtomatiki faýlower; müşderiler 'MOVED/ASK' redaksiýalaryny goldamaly.
AOF/RDB: kesh üçin, adatça 'appendfsync everysec', persistentlik bolmazdan (arassa kesh hökmünde) mümkindir.

10. 2 Memcached

Gutudan göçürme ýok. Ygtybarlylyk - köp gapyly şard + n '(client-side) gaýtalamak arkaly.
Nod ýykylanda - sypdyrmalaryň köpelmegi we keshiň "gaýtadan öwrenilmegi".

10. 3 K8s we tor taraplary

Redis/Memcached pod 'laryň ýygy-ýygydan gaýtadan iberilmegini halamaýar; StatefulSet + AZ antipodlary, kesgitlenen PVC/POD IP ulanyň.
PodDisruptionBudget we TopologySpreadConstraints goýuň.

11) Amallar, skriptlar we atomarlyk (Redis)

INCR/DECR, HINCRBY - hasaplaýjylar, kwotalar, rate-limits (diňe persisti göz öňünde tutuň).
MULTI/EXEC - atom buýruklarynyň bukjasy.
Lua (EVAL) - ýaryşsyz read-modify-write.
Pipeline - RTT-ni azaldar (esasanam tor hopunda).

Mysal üçin rate-limit (token bucket, ýönekeýleşdirilen):
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) Nobatlar, pub/sub we akymlar (Redis)

Pub/Sub: maýyplyk, signallar. Saklamak ýok, diňe onlaýn diňleýjiler.
Akymlar: tassyklanan wakalaryň nobatlary (ACK), sarp edijiler topary, retralar - write-behind/fan-autlar üçin amatly.
Lists ('BRPOP'): ýönekeý nobatlar.
Redis-i "hemme zadyň bir tekeri" hökmünde arka tarapsyz ulanmaň - bu Kafka däl, kesh/çalt teker.

13) Howpsuzlyk we elýeterlilik

Tor izolýasiýasy/VPC, mTLS ingress derejesinde, ACL/parollar ('requirepass '/ACL Redis 6 +).
Disable dangerous komandalar Redis ('CONFIG', 'FLUSHALL', 'KEYS') ACL arkaly.
Memcached üçin - köpçülige açyk interfeýsleri diňlemäň, '-U 0' (UDP bolmasa), diňe hususy torlar.
PII saklanylmaýar; zerur bolsa - programma derejesinde gysga TTL + şifrlemek.

14) Gözegçilik we hyzmat etmek

Esasy metrikler:
  • Hit ratio/Miss ratio (namespace/marşrut boýunça).
  • Latency p95/p99 'GET/SET/MGET', timeouts.
  • Evictions и OOM errors.
  • Replication lag (Redis), cluster state, migrate/rehash events.
  • Trafik/baýt boýunça Top-N keys (sampling).
  • Bloglar: haýal buýruklar ('slowlog'), ulgam ýalňyşlyklary.
  • Daşbordlar: umumy (CPU/RAM/connections), toplynyň toparlary, slotlary, sentinels, Prometheus-eksportçylardan geçip.

15) Konfigi we ýerleşdirmek - mysallar

15. 1 Redis Sentinel (bölek)


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 Redis Cluster (helm values, ýönekeý)

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

15. 3 Memcached (deployment)

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

15. 4 NGINX read-through proxy (API kontury)

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) Synag we geýtlar

Ýük profilleri "sowuk/ýyly/gyzgyn kesh".
Sypdyrma sanjymy (purge köpçülikleýin) - origin "gaýtadan öwrenişe" çydamaly.
Alertler: hit-ratio-nyň ýiti pese gaçmagy, miss latency-iň ösmegi, evictions-yň göçmegi, timeouts-yň ösüşi.

17) Anti-patternler

"Hakykaty" AOF/RDB-siz we ätiýaçlyk bolmazdan Redis-de saklaň.
Üýtgeýän maglumatlar üçin TTL = 0 (hemişelik) → baky yzygiderlilik.
Köpçülikleýin 'KEYS' -de.
Jitter/soft-TTL → sinhron akymlary we tupan ýok.
Şardlamasyz/replikasyz ähli toparlar üçin bir ýagdaý.
Ýadro/skript talap edýän meseleler üçin Memcached programmasyny ulanyň.

18) Giriş çek-sanawy (0-45 gün)

0-10 gün

Şablony saýla (cache-aside + L1/L2), açarlary, TTL, neýspesleri beýan et.
Jitter/soft-TTL, singleflight; esasy alertler/daşbordlar.
Redis üçin - ACL, protected-mode, slowlog, maxmemory-policy sazlamak.

11-25 gün

Şardirlemäge (Redis Cluster ýa-da müşderi heşi), replikalara geçiň.
pub/sub ýa-da neýspeýsiň wersiýasy arkaly maýyplyk; DB-da outbox.
Keshiň "gaýtadan öwrenilmeginiň" ýükleýji synaglary; limiting origin.

26-45 gün

Awtoulag mahabaty/kanareýa TTL, çykmazdan ozal gyzdyrmak.
Write-behind/fon jübütleri üçin akymlar.
Hit-ratio, top-açarlar, ýat bahasy boýunça hepdelik hasabatlar.

19) Kämillik ölçegleri

Hit-ratio L2 ≥ 80% (marşrutlar/alamatlar boýunça statistika).
P95 GET <2-3 ms (in-DC), ýalňyşlyklar <SLO origin.
Köpçülikleýin maýyplyk wagtynda tupan 0 (synaglar bilen subut edildi).
Neýspeýsleri awtomatiki maýyplaşdyrmak we wersiýalaşdyrmak.
Şardlamak/replikasiýa 1 düwüniň göze görnüp duran pese gaçmazdan şowsuzlygyny ýapýar.

20) Netijenama

Güýçli keşiň arhitekturasy açarlaryň we TTL-iň düzgüni, tupandan goramak, dogry şardlamak we öňünden aýdyp boljak göçürmek. Redis baý semantika, dowamlylyk we atomarlyk berýär; Memcached - iň ýönekeýligi we tizligi. Wakalara syn etmek, maýyplyk, L1 + L2 goşuň we keş tötänleýin ýykylmagyň we "mistiki" bökdençlikleriň çeşmesi däl-de, platformanyň tizlendirijisi bolar.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.