0Pricing
Cloud & IT Cert Prep · Lekcja

Redis a Memcached: wybór właściwego silnika

Porównać Redis (trwałość, replikacja, uporządkowane zbiory, pub/sub) z Memcached (prostota, wielowątkowość) i dokonać wyboru na podstawie wymagań przypadku użycia.

Redis a Memcached: wybór właściwego silnika to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Czym jest Amazon ElastiCache

Amazon ElastiCache to w pełni zarządzana usługa buforowania w pamięci, która ułatwia wdrażanie, zarządzanie i skalowanie popularnych, otwartoźródłowych magazynów danych w pamięci w chmurze. Obsługuje dwa silniki: Redis i Memcached. Udostępniając często żądane dane z pamięci zamiast z bazy danych, ElastiCache może zmniejszyć obciążenie bazy danych o rzędy wielkości oraz skrócić opóźnienie odpowiedzi z milisekund do mikrosekund. Wybór między Redis i Memcached to częste pytanie na egzaminie SAA-C03.

Memcached: czysta prostota

Memcached to rozproszony magazyn klucz-wartość w pamięci, skoncentrowany na prostocie i skalowaniu horyzontalnym. Najważniejsze cechy: wielowątkowość (może korzystać ze wszystkich rdzeni procesora w jednym węźle), prosty magazyn klucz-wartość (wyłącznie ciągi znaków, bez złożonych struktur danych), brak trwałości (dane są tracone po ponownym uruchomieniu węzła), brak replikacji (brak węzła zapasowego i replik) oraz fragmentowanie horyzontalne za pomocą haszowania spójnego po stronie klienta. Memcached jest właściwym wyborem, gdy potrzebują Państwo prostego bufora na dużą skalę i nie wymagają trwałości, złożonych typów danych ani wysokiej dostępności.

# Create a Memcached cluster with 3 nodes
aws elasticache create-cache-cluster \
  --cache-cluster-id my-memcached \
  --engine memcached \
  --cache-node-type cache.r7g.large \
  --num-cache-nodes 3 \
  --cache-subnet-group-name my-subnet-group

# Memcached auto-discovers nodes via the config endpoint
# Application connects to: my-memcached.cfg.use1.cache.amazonaws.com:11211

Redis: bogaty w funkcje magazyn danych w pamięci

Redis (Remote Dictionary Server) to jednowątkowy (w ramach instancji), bogaty w funkcje magazyn struktur danych w pamięci, obsługujący ciągi znaków, hasze, listy, zbiory, zbiory uporządkowane, bitmapy, HyperLogLogs, strumienie i indeksy geoprzestrzenne. Najważniejsze zalety w porównaniu z Memcached: opcjonalna trwałość (migawki AOF i RDB), replikacja (repliki do odczytu i automatyczne przełączanie awaryjne), komunikacja pub/sub, skrypty Lua, transakcje (MULTI/EXEC) oraz tryb klastra na potrzeby fragmentowania horyzontalnego. Redis jest właściwym wyborem w większości rzeczywistych scenariuszy buforowania.

# Redis data structure examples

# String
# SET user:1:name 'Alice'
# GET user:1:name

# Hash (object-like)
# HSET product:42 name 'Widget' price '9.99' stock '100'
# HGETALL product:42

# Sorted set (leaderboard)
# ZADD leaderboard 9500 'alice' 8700 'bob' 9100 'carol'
# ZREVRANGE leaderboard 0 2 WITHSCORES

# Pub/Sub
# PUBLISH notifications 'order_shipped:12345'
# SUBSCRIBE notifications

Trwałość Redis: AOF i RDB

Redis obsługuje dwa mechanizmy trwałości: RDB (Redis Database) — okresowe migawki stanu z określonego momentu, zapisywane na dysku w konfigurowalnych odstępach czasu (szybkie ponowne uruchamianie, ale możliwość utraty danych zapisanych między migawkami). AOF (Append-Only File) — rejestruje każdą operację zapisu; po ponownym uruchomieniu Redis odtwarza dziennik, aby odbudować stan (trwałość kosztem większych plików i wolniejszego ponownego uruchamiania). W ElastiCache można włączyć AOF, aby zachować dane po ponownym uruchomieniu węzłów. Ma to kluczowe znaczenie, gdy ElastiCache jest używany nie tylko jako bufor, ale także jako główny magazyn danych, na przykład do przechowywania danych sesji.

# Create an ElastiCache Redis cluster with AOF enabled
aws elasticache create-replication-group \
  --replication-group-id my-redis \
  --replication-group-description 'Redis with persistence' \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --num-cache-clusters 2 \
  --cache-parameter-group-name default.redis7 \
  --snapshot-retention-limit 5

# Note: Enable AOF via parameter group: appendonly=yes

Replikacja Redis i automatyczne przełączanie awaryjne

Redis obsługuje grupy replikacji z jednym węzłem głównym, który obsługuje wszystkie zapisy, oraz maksymalnie 5 replikami do odczytu, które obsługują odczyty. Po włączeniu funkcji Multi-AZ i automatycznego przełączania awaryjnego ElastiCache automatycznie promuje replikę do odczytu do roli głównej, gdy węzeł główny ulegnie awarii — zwykle przełączanie kończy się w czasie krótszym niż 60 sekund. Zapewnia to aplikacjom korzystającym z Redis wysoką dostępność, której Memcached nie może zaoferować (Memcached nie obsługuje replikacji). W przypadku aplikacji produkcyjnych wymagających buforowania o wysokiej dostępności należy zawsze używać Redis z automatycznym przełączaniem awaryjnym.

# Create a Redis replication group with Multi-AZ failover
aws elasticache create-replication-group \
  --replication-group-id prod-redis \
  --description 'Production Redis with HA' \
  --cache-node-type cache.r7g.xlarge \
  --engine redis \
  --multi-az-enabled \
  --automatic-failover-enabled \
  --num-cache-clusters 3 \
  --cache-subnet-group-name multi-az-subnet-group

# 1 primary + 2 replicas across 3 AZs

Posortowane zbiory Redis na potrzeby rankingów

Posortowane zbiory to jedna z najpotężniejszych struktur danych Redis. Każdy element ma powiązany wynik zmiennoprzecinkowy, a elementy są zawsze przechowywane w uporządkowanej kolejności. Dzięki temu posortowane zbiory idealnie nadają się do tworzenia rankingów (sortowanie według wyniku), kolejek priorytetowych (najpierw przetwarzane są zadania o najwyższym priorytecie) oraz ograniczania częstotliwości (przesuwane okno czasowe z sygnaturami czasowymi jako wynikami). Operacje ZADD, ZRANGE, ZREVRANGE, ZRANK i ZRANGEBYSCORE mają złożoność O(log n) — są niezwykle wydajne nawet w przypadku milionów wpisów.

# Leaderboard operations using Redis sorted sets

# Add/update scores
# ZADD game:leaderboard 10500 'player:alice'
# ZADD game:leaderboard 9800  'player:bob'
# ZADD game:leaderboard 11200 'player:carol'

# Get top 3 players (highest scores first)
# ZREVRANGE game:leaderboard 0 2 WITHSCORES
# Result: carol 11200, alice 10500, bob 9800

# Get a player's rank (0-indexed)
# ZREVRANK game:leaderboard 'player:alice'
# Result: 1 (second place)

Redis Pub/Sub do obsługi komunikatów

Funkcja pub/sub Redis umożliwia nadawcom rozsyłanie komunikatów do kanałów bez wiedzy o tym, kto jest subskrybentem. Subskrybenci otrzymują w czasie rzeczywistym wszystkie komunikaty publikowane w kanałach, które subskrybują. Komunikaty pub/sub nie są utrwalane — jeśli subskrybent jest offline, nie otrzyma komunikatu. W przypadku trwałej komunikacji z gwarancją dostarczenia należy użyć Redis Streams (bardziej zaawansowanej struktury danych dodanej w Redis 5) lub wyspecjalizowanej usługi komunikatów, takiej jak SQS albo SNS. Na egzaminie SAA-C03 funkcja pub/sub Redis jest opcją do lekkich powiadomień w czasie rzeczywistym między usługami.

# Publisher side (broadcasts to 'notifications' channel)
# PUBLISH notifications '{"type":"order_shipped","orderId":"12345"}'

# Subscriber side (listens for messages)
# SUBSCRIBE notifications

# Pattern subscribe (wildcard channel matching)
# PSUBSCRIBE order:*
# Receives messages from: order:created, order:shipped, order:delivered

# Note: Unlike SQS, pub/sub is fire-and-forget — no acknowledgement

Memcached a Redis: tabela wyboru

Na egzaminie SAA-C03 należy zastosować następujące zasady wyboru: wybierz Memcached, gdy potrzebujesz prostego bufora bez wymogu wysokiej dostępności, wydajności wielowątkowej oraz skalowania horyzontalnego przez dodawanie węzłów (czysty bufor). Wybierz Redis, gdy potrzebujesz: trwałości (magazyn sesji), replikacji i przełączania awaryjnego (wysoka dostępność), złożonych typów danych (posortowane zbiory na potrzeby rankingów, zbiory, listy), pub/sub, transakcji Lua lub trybu klastra do horyzontalnego skalowania z użyciem wielu fragmentów. Jeśli treść pytania egzaminacyjnego wspomina o dowolnej funkcji wykraczającej poza proste buforowanie klucz-wartość, odpowiedzią niemal zawsze jest Redis.

Typy i rodziny węzłów bufora

ElastiCache oferuje kilka rodzin typów węzłów: r7g (Graviton 3, zoptymalizowane pod kątem pamięci — najlepszy stosunek ceny do wydajności, zalecane w przypadku większości zastosowań buforowania), m7g (zrównoważone zasoby obliczeniowe i pamięć) oraz t4g (z możliwością zwiększania wydajności, niski koszt w środowiskach programistycznych i testowych). Rozmiary węzłów wahają się od cache.t4g.micro (500 MB) do cache.r7g.16xlarge (425 GB). W środowisku produkcyjnym należy wybrać rozmiar węzła, który pozwoli przechowywać cały zestaw danych w pamięci, pozostawiając 20–25% zapasu. Wyczerpanie pamięci powoduje eksmisję danych (Memcached) lub błędy OOM (Redis).

# Get available cache node types
aws elasticache describe-cache-engine-versions \
  --engine redis \
  --query 'CacheEngineVersions[?contains(EngineVersion, '7')].{Engine:Engine,Version:EngineVersion}'

# Check memory and vCPU for a node type
aws elasticache describe-cache-engine-versions \
  --cache-parameter-group-family redis7

# Monitor evictions to detect memory pressure
# CloudWatch: Evictions metric > 0 means cache is full

Bezpieczeństwo ElastiCache

ElastiCache jest wdrażany w obrębie VPC, a grupy zabezpieczeń kontrolują dostęp — domyślnie nie ma dostępu z publicznego Internetu. W przypadku Redis należy włączyć tokeny AUTH (hasło, które klienci muszą podać) oraz szyfrowanie podczas przesyłania (TLS) dla połączeń, a także szyfrowanie danych w spoczynku za pomocą KMS. W przypadku Memcached dostępne jest wyłącznie szyfrowanie TLS podczas przesyłania (brak szyfrowania danych w spoczynku i AUTH). Podczas migracji z nieszyfrowanego Redis do szyfrowanego nie ma możliwości migracji w miejscu — należy utworzyć nowy zaszyfrowany klaster i wstępnie go wypełnić.

# Create a Redis cluster with TLS and AUTH token
aws elasticache create-replication-group \
  --replication-group-id secure-redis \
  --description 'Encrypted Redis' \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --transit-encryption-enabled \
  --at-rest-encryption-enabled \
  --auth-token 'MySecretPassword123!'

# Store the AUTH token in Secrets Manager, not in your app code

Zasady eksmisji

Gdy bufor Redis lub Memcached jest pełny, zasada eksmisji określa, które klucze zostaną usunięte, aby zrobić miejsce. Typowe zasady eksmisji Redis: noeviction (zwraca błąd OOM — dobre rozwiązanie, gdy bufor jest głównym magazynem), allkeys-lru (usuwa najdawniej używane klucze spośród wszystkich kluczy — dobre rozwiązanie dla bufora ogólnego przeznaczenia), volatile-lru (LRU wśród kluczy z ustawionym TTL — zachowuje klucze bez terminu wygaśnięcia), allkeys-random (losowa eksmisja) oraz allkeys-lfu (usuwa najrzadziej używane klucze). W typowych zastosowaniach buforowania zalecane są allkeys-lru lub allkeys-lfu.

# Set eviction policy via parameter group
aws elasticache create-cache-parameter-group \
  --cache-parameter-group-name redis7-lru \
  --cache-parameter-group-family redis7 \
  --description 'LRU eviction policy'

aws elasticache modify-cache-parameter-group \
  --cache-parameter-group-name redis7-lru \
  --parameter-name-values ParameterName=maxmemory-policy,ParameterValue=allkeys-lru

# Apply the parameter group to your cluster:
aws elasticache modify-replication-group \
  --replication-group-id prod-redis \
  --cache-parameter-group-name redis7-lru

Szybki sprawdzian

Sprawdź swoją wiedzę na temat zagadnień AWS Solutions Architect (SAA-C03) z tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyłeś się, że: Memcached jest prosty, wielowątkowy i nie zapewnia wysokiej dostępności — najlepiej nadaje się do czystego skalowania horyzontalnego prostych buforów; Redis obsługuje złożone struktury danych, trwałość, pub/sub i przełączanie awaryjne Multi-AZ — najlepiej sprawdza się w większości produkcyjnych scenariuszy buforowania; a posortowane zbiory sprawiają, że Redis jest naturalnym wyborem do rankingów i kolejek priorytetowych. Następnie omówimy grupy replikacji Redis i tryb klastra na potrzeby fragmentowania horyzontalnego.

Często zadawane pytania

Czy lekcja „Redis a Memcached: wybór właściwego silnika” jest bezpłatna?

Tak — pełny tekst „Redis a Memcached: wybór właściwego silnika” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Redis a Memcached: wybór właściwego silnika”?

Porównać Redis (trwałość, replikacja, uporządkowane zbiory, pub/sub) z Memcached (prostota, wielowątkowość) i dokonać wyboru na podstawie wymagań przypadku użycia. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?

Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Redis a Memcached: wybór właściwego silnika”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?

Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Redis a Memcached: wybór właściwego silnika
  2. Grupy replikacji Redis ElastiCache i tryb klastra
  3. Strategie buforowania: lazy loading i write-through
  4. Przechowywanie sesji i wzorce tabel wyników
← Powrót do Cloud & IT Cert Prep