Czym jest Redis i do czego służy?

Piotr Dul

06-11-2026

Czym jest Redis, jakie ma struktury danych i jak używać go jako cache, do sesji, liczników i rankingów. Z przykładami w Pythonie, zasadami TTL i trwałości oraz pułapkami początkujących.

Czym jest Redis i do czego służy?
Redis to szybka baza danych przechowująca dane w pamięci operacyjnej w postaci par klucz-wartość i gotowych struktur (napisy, listy, zbiory, hashe, rankingi). Najczęściej służy jako cache przyspieszający aplikację, a także do sesji użytkowników, liczników i prostych kolejek. Dane można zapisywać na dysk, ale Redis nie zastępuje zwykłej bazy danych.

Redis pojawia się w prawie każdym opisie backendu: w ogłoszeniach, w dokumentacji frameworków i na rozmowach rekrutacyjnych. Wiele osób uczących się programowania słyszy o nim jako o „cache”, ale nie wie, czym dokładnie jest i kiedy go użyć. Ten artykuł wyjaśnia, czym jest Redis, jakie ma struktury danych, jak działa jako cache, co się dzieje z danymi po restarcie i jakie błędy popełniają początkujący. Zaznaczam od razu: przykłady w Pythonie uruchomiłem na bibliotece fakeredis, a nie na prawdziwym serwerze Redis. Opisy trwałości i wygaszania danych opieram na oficjalnej dokumentacji.

Czym jest Redis?

Nazwa Redis oznacza „Remote Dictionary Server”, czyli zdalny serwer słownika. To oprogramowanie, które przechowuje dane w pamięci operacyjnej (in-memory) i udostępnia je aplikacjom przez sieć. Dane są zapisane jako pary klucz-wartość (key-value): każdy element ma unikalny klucz, np. sesja:abc123, i przypisaną wartość. Dokumentacja zwraca uwagę, że możesz używać po stronie serwera tych samych typów danych, które znasz z własnego języka programowania: napisów, słowników czy list.

Skąd szybkość? Dane leżą w pamięci RAM, a nie na dysku, więc odczyt nie wymaga sięgania do wolniejszego nośnika. Tak działa większość typowych zastosowań Redisa: aplikacja zamiast pytać za każdym razem bazę danych, pyta Redisa.

Aktualna wersja Redisa to 8.10.3 (wydana 26 października 2026). Warto wiedzieć o jednej sprawie licencyjnej: w marcu 2024 roku Redis zmienił licencję z BSD na dwie licencje źródłowo dostępne, co skłoniło Linux Foundation do stworzenia otwartego forka o nazwie Valkey. Od maja 2025 roku Redis 8 oferuje też licencję AGPLv3 jako trzecią opcję. Te szczegóły pochodzą z doniesień prasowych, a nie z oficjalnego komunikatu, więc jeśli licencja ma znaczenie w Twoim projekcie, sprawdź ją u źródła. Dla nauki podstaw nie ma to znaczenia, bo komendy są w praktyce te same.

Jakie struktury danych ma Redis?

Redis nie przechowuje tylko napisów. Daje kilka gotowych struktur, a każda ma własne komendy:

StrukturaDo czego służyPrzykład użycia
String (napis)tekst, liczba, zserializowany obiektsesja, licznik odwiedzin, cache strony
Hashobiekt z polami, jak słownikprofil użytkownika
List (lista)uporządkowana sekwencjaprosta kolejka zadań
Set (zbiór)unikalne elementy bez kolejnościtagi, zbiór obserwujących
Sorted set (zbiór posortowany)unikalne elementy z punktacjąranking graczy

Najważniejsza uwaga o napisach: według dokumentacji stringi w Redisie to sekwencje bajtów, w tym tekst, zserializowane obiekty i wartości liczników. Dlatego liczby, które zapisujesz i odczytujesz, wracają do Pythona jako napisy (to widać w przykładzie niżej).

Jak wygląda kod w Pythonie? Sprawdzone przykłady

Do pracy z Redisem w Pythonie służy biblioteka redis (redis-py 8.1). Poniższe przykłady uruchomiłem na fakeredis 2.40, czyli na implementacji naśladującej Redisa w samym Pythonie, bez prawdziwego serwera. W kodzie produkcyjnym zamiast FakeRedis używasz redis.Redis(host="localhost", port=6379, decode_responses=True):

import fakeredis

r = fakeredis.FakeRedis(decode_responses=True)

# sesja z czasem życia 30 sekund
r.set("sesja:abc123", "uzytkownik:42", ex=30)
print(r.get("sesja:abc123"))

# licznik
for _ in range(3):
    r.incr("odwiedziny:strona-glowna")
print(r.get("odwiedziny:strona-glowna"))

# hash jako obiekt
r.hset("uzytkownik:42", mapping={"imie": "Anna", "miasto": "Gdansk", "punkty": 120})
print(r.hgetall("uzytkownik:42"))

# ranking
r.zadd("ranking", {"anna": 120, "bartek": 95, "celina": 150})
print(r.zrevrange("ranking", 0, 1, withscores=True))

Wyniki, które zobaczyłem:

PolecenieWynikCo z tego wynika
get klucza z TTLuzytkownik:42klucz istnieje, ma jeszcze czas życia
get nieistniejącego kluczaNonebrak klucza to nie błąd, tylko None
incr trzy razy, potem get"3"licznik rośnie atomowo, ale odczyt to napis
hgetall{'imie': 'Anna', 'miasto': 'Gdansk', 'punkty': '120'}liczba 120 wróciła jako '120'
sadd z duplikatem, potem scard2zbiór pomija powtórzone elementy
zrevrange rankingucelina 150.0, anna 120.0ranking zwraca elementy od najwyższej punktacji
rpush dwóch zadań, lpoppierwsze dodane zadanielista działa jak kolejka FIFO
set z nx=True dwa razyTrue, potem Nonedrugi zapis nie nadpisał klucza

Ostatni wiersz to podstawa prostej blokady (lock): kilka procesów próbuje ustawić ten sam klucz, ale udaje się tylko jednemu. Do poważnych zastosowań blokady rozproszone wymagają więcej uwagi, czego tu nie sprawdzałem.

Jak działa Redis jako cache?

To najczęstsze zastosowanie. Cache (pamięć podręczna) przechowuje wynik kosztownej operacji, np. zapytania do bazy danych, żeby następnym razem go nie liczyć. Najprostszy wzorzec to cache-aside:

  1. Aplikacja sprawdza w Redisie, czy ma gotowy wynik.
  2. Jeśli tak, zwraca go od razu.
  3. Jeśli nie, pyta bazę danych, zapisuje wynik w Redisie z czasem życia (TTL) i zwraca go.
import json

def pobierz_uzytkownika(uid):
    klucz = f"cache:uzytkownik:{uid}"
    w_cache = r.get(klucz)
    if w_cache is not None:
        return json.loads(w_cache)
    dane = pobierz_z_bazy(uid)
    r.set(klucz, json.dumps(dane), ex=60)
    return dane

Sprawdziłem ten wzorzec z licznikiem zapytań do „bazy”: pięć odczytów tego samego użytkownika dało jedno zapytanie do bazy, a po usunięciu klucza z cache kolejny odczyt znowu poszedł do bazy (razem dwa zapytania). Z tego wynika najważniejsza lekcja o cache: dane w cache mogą być nieaktualne. Jeśli ktoś zmieni użytkownika w bazie, a w Redisie zostanie stara kopia, aplikacja będzie ją zwracać aż do końca TTL albo do ręcznego usunięcia klucza. Dlatego każdy wpis w cache powinien mieć czas życia (parametr ex), a przy zmianie danych warto usuwać odpowiedni klucz.

Co się dzieje, gdy Redisowi zabraknie pamięci?

Dane w Redisie siedzą w pamięci RAM, a RAM jest skończona. Dokumentacja podaje dwie ważne informacje:

  • Domyślnie nie ma limitu. Opcja maxmemory ma wartość zero, co na systemach 64-bitowych oznacza brak limitu pamięci dla danych. Na serwerze z innymi usługami warto ustawić limit samemu.
  • Po osiągnięciu limitu działa wybrana polityka wygaszania (eviction policy). Polityka noeviction nie usuwa niczego i zwraca błąd przy próbie dodania nowych danych (odczyty nadal działają). Dla cache dokumentacja poleca na ogół allkeys-lru, czyli usuwanie kluczy, których dawno nie używano, i nazywa ją dobrym wyborem domyślnym, jeśli nie masz powodu, by wybrać inną.

Czy cache działa dobrze, sprawdzisz poleceniem INFO stats. Pokazuje ono liczbę trafień (keyspace_hits) i chybień (keyspace_misses), z których liczysz odsetek trafień: hits / (hits + misses) * 100. Jeśli jest niższy, niż się spodziewasz, możliwe, że klucze są usuwane za szybko albo TTL jest za krótki.

Czy dane w Redisie przepadają po restarcie?

Mogą, ale nie muszą. Redis może zapisywać dane na dysk na dwa sposoby, a dokumentacja opisuje cztery konfiguracje:

TrybJak działaIle możesz stracić
RDB (migawki)co jakiś czas zapisuje cały stan do pliku dump.rdbzwykle ostatnie minuty
AOF (dziennik)zapisuje każdą operację zapisu i odtwarza je po starciedomyślnie do sekundy (appendfsync everysec)
RDB + AOFoba naraznajmniej, to zalecenie dla ważnych danych
Brak trwałościwszystko tylko w pamięciwszystko po restarcie

Dokumentacja radzi: jeśli zależy Ci na bezpieczeństwie danych na poziomie zbliżonym do PostgreSQL, używaj obu metod naraz. Jeśli możesz zaakceptować utratę kilku minut danych, wystarczy sam RDB. Brak trwałości bywa świadomym wyborem przy czystym cache, bo tracisz tylko kopie, które da się odtworzyć z bazy. Dlatego Redis jako główne miejsce przechowywania ważnych danych (zamówień, płatności) wymaga dużej ostrożności: do tego służy zwykła baza danych, np. relacyjna, o której piszemy w artykule o relacjach i JOIN-ach w SQL.

Redis czy baza danych? Redis czy Kafka?

To dwa najczęstsze pytania początkujących:

PytanieKrótka odpowiedź
Redis zamiast bazy danych?Zwykle nie. Redis jest szybki, ale trzyma dane w pamięci i nie ma relacji ani zapytań jak SQL. Najczęściej stoi obok bazy i przyspiesza odczyty.
Redis zamiast Kafki?To inne narzędzia: Redis to szybki magazyn w pamięci, a Kafka to trwały dziennik zdarzeń, który wiele usług czyta niezależnie. Redis wystarczy do prostej kolejki zadań (lista), do rozbudowanych strumieni zdarzeń służy Kafka. Opisujemy ją w artykule czym jest Apache Kafka.

Do czego używa się Redisa?

ZastosowanieStrukturaDlaczego Redis
Cache wyników zapytań lub stronstringszybki odczyt, automatyczne wygasanie
Sesje użytkownikówstring lub hashTTL sam kończy sesję
Liczniki (odwiedziny, limity zapytań)string z INCRatomowy licznik
Rankingisorted setgotowe sortowanie po punktacji
Prosta kolejka zadańlistaRPUSH i LPOP
Blokada (np. tylko jeden worker naraz)string z NXzapis tylko, gdy klucz nie istnieje

Jeśli interesuje Cię temat sesji i logowania, zobacz JWT i logowanie w FastAPI. Tokeny JWT i sesje trzymane w Redisie to dwa różne podejścia do tego samego problemu.

Jakie błędy najczęściej popełniają początkujący?

BłądCo się dziejeJak uniknąć
Operacja na kluczu złego typubłąd WRONGTYPE Operation against a key holding the wrong kind of value (sprawdziłem: LPUSH na kluczu, który był stringiem)trzymaj typ pod kluczem i nadawaj klucze z prefiksem, np. sesja:, cache:
Brak TTL w cachestare dane zostają na zawsze, pamięć rośniezawsze ustawiaj ex dla wpisów cache
Przeglądanie wszystkich kluczyna dużej bazie blokuje serwer (popularne pytanie „jak wypisać wszystkie klucze”)używaj SCAN z kursorem, jak w dokumentacji
Liczby jako napisy"120" zamiast 120konwertuj po odczycie (int(...))
Brak limitu pamięciRedis zjada całą pamięć serweraustaw maxmemory i politykę wygaszania
Cache jako jedyne miejsce danychpo restarcie bez trwałości dane znikająważne dane trzymaj w zwykłej bazie

Kto używa Redisa i z jakimi technologiami się go łączy?

Najlepszym dostępnym wskaźnikiem popularności jest ankieta Stack Overflow Developer Survey 2025. W kategorii baz danych Redis zajął 5. miejsce: używało go 28% wszystkich respondentów i 30,7% programistów zawodowych, a wyprzedziły go tylko PostgreSQL, MySQL, SQLite i Microsoft SQL Server. Ankieta wspomina też o wyraźnym wzroście użycia Redisa (o 8 punktów procentowych), ale w dostępnym tekście strony nie podano, względem którego roku. To dobrowolna ankieta programistów, a nie pomiar rynku.

Strona Redisa z historiami klientów pokazuje, do czego firmy go używają (to materiał marketingowy producenta, a podane liczby pochodzą od Redisa i klientów, bez niezależnej weryfikacji):

FirmaZastosowanie (wg strony Redisa)
Axis Bankprzyspieszenie płatności online i transakcji UPI (deklarowane 76% szybciej)
Sony LIVszybsze odpowiedzi API (deklarowane 37%) i mniejsze zużycie pamięci
Plivoobsługa ponad miliarda zapytań do API miesięcznie
Ulta Beautyszybkie działanie internetowego sklepu
Raymond James, CP AXTRA, Superlinkedwyszukiwanie wektorowe i hybrydowe, m.in. dla rekomendacji i systemów RAG

Z jakimi technologiami łączy się Redisa? Dokumentacja opisuje go jako narzędzie, którego „zwykle używa się jako cache do przyspieszania odczytów z wolniejszego serwera lub bazy danych”, więc najczęściej stoi obok głównej bazy (np. PostgreSQL czy MySQL, które w ankiecie Stack Overflow są wyżej). Dokumentacja pokazuje klientów dla wielu języków: Python (redis-py), JavaScript (Node.js), Java (Jedis, Lettuce), Go, C#, PHP (Predis), Ruby i Rust, więc pasuje do niemal każdego backendu. Od niedawna Redis pojawia się też w projektach AI, np. do wyszukiwania wektorowego i pamięci agentów. Nie sprawdzałem, które frameworki mają wbudowaną obsługę Redisa jako cache ani jak często robią to polskie firmy.

Czy Redis pojawia się w ofertach pracy?

Sprawdziłem to 5 listopada 2026 na portalu justjoin.it, wpisując słowo kluczowe w wyszukiwarkę: z 20 393 wszystkich ofert fraza „redis” dała 489 wyników (około 2,4%). Czytaj to ostrożnie: nie wiem, jak portal dopasowuje słowo kluczowe (w tytule, tagach czy opisie), a jeden pomiar z jednego dnia nie mówi nic o trendzie. Nie nadaje się do porównań z innymi technologiami. Sama liczba mówi tylko, że Redis jest w ofertach obecny. Pierwsze wyniki to zwykłe stanowiska (programista AI w Pythonie, DevOps, programista PHP), na których Redis jest jedną z technologii, a nie nazwą stanowiska.

Jak zacząć naukę Redisa?

  1. Opanuj backend. Redis ma sens, gdy masz aplikację i bazę danych, które chcesz przyspieszyć. Zacznij od pierwszego API we FastAPI.
  2. Zainstaluj Redisa lokalnie według instrukcji w dokumentacji albo załóż darmową bazę w chmurze Redis Cloud, do której dokumentacja odsyła na początek.
  3. Poznaj redis-cli i pięć podstawowych struktur: SET/GET, HSET, RPUSH, SADD, ZADD.
  4. Dodaj cache do własnej aplikacji wzorcem cache-aside i zmierz, ile zapytań do bazy zaoszczędziłeś.
  5. Ustaw TTL, maxmemory i politykę wygaszania i sprawdź hit ratio w INFO stats.

Jeśli chcesz zbudować solidny fundament backendowy w Pythonie pod okiem mentora, zapraszam na kurs Python developer. Redis nie jest jego elementem, ale to, czego nauczysz się o API, bazach danych i architekturze aplikacji, jest punktem wyjścia do cache'owania i optymalizacji.

Na co zwraca uwagę mentor przy Redisie?

Zanim dodasz Redisa, sprawdź, czy wolne zapytanie nie potrzebuje po prostu indeksu w bazie. Cache ukrywa problem, a nie go usuwa.

Podsumowanie

  • Redis to szybki magazyn klucz-wartość w pamięci z gotowymi strukturami: napis, hash, lista, zbiór i zbiór posortowany.
  • Najczęściej służy jako cache (wzorzec cache-aside z TTL), do sesji, liczników, rankingów i prostych kolejek.
  • Dane w cache bywają nieaktualne, więc każdy wpis powinien mieć czas życia, a przy zmianie danych warto usuwać klucz.
  • Domyślnie Redis nie ma limitu pamięci; po jego ustawieniu polityka allkeys-lru jest według dokumentacji dobrym wyborem dla cache.
  • Dane można zapisywać na dysk (RDB, AOF lub oba), ale Redis zwykle stoi obok zwykłej bazy danych, a nie zamiast niej.
  • Przykłady w Pythonie sprawdziłem na fakeredis, bez prawdziwego serwera Redis.
Konsultacja i warsztaty devmentor.pl

Masz pytania?

Partnerzy

Firmy, z którymi współpracujemy

To partnerzy odpowiedzialni za staże po naszych kursach. Organizują je dla najlepszych absolwentów.

Zobacz wszystkich partnerów →
  • VR Medical
  • Sophona
  • Robot Force