Redis

Kasia Bielawska
>
Kasia Bielawska

Co to jest Redis?

Redis to szybki magazyn danych działający przede wszystkim w pamięci operacyjnej RAM. Jest zaliczany do rozwiązań NoSQL i jest często wykorzystywany jako pamięć podręczna, magazyn sesji, mechanizm kolejkowania oraz miejsce przechowywania danych, do których aplikacja musi mieć bardzo szybki dostęp.

Nazwa Redis pochodzi od Remote Dictionary Server. Choć często opisuje się go jako bazę klucz–wartość, współczesny Redis obsługuje znacznie więcej struktur danych. Oprócz prostych wartości umożliwia pracę między innymi z listami, zbiorami, hashami, strumieniami czy dokumentami JSON.

Redis jest szczególnie przydatny tam, gdzie aplikacja wielokrotnie korzysta z tych samych informacji. Zamiast za każdym razem wykonywać kosztowne zapytanie do głównej bazy danych, może pobrać wcześniej zapisany wynik bezpośrednio z szybkiej pamięci.

Jak działa Redis?

Najważniejszą cechą Redis jest przechowywanie roboczych danych przede wszystkim w pamięci RAM. Dostęp do pamięci operacyjnej jest znacznie szybszy niż typowe odczyty wykonywane bezpośrednio z pamięci masowej, dlatego Redis dobrze sprawdza się w zastosowaniach, w których liczy się krótki czas odpowiedzi.

Dane są identyfikowane przy użyciu kluczy. Aplikacja może przykładowo zapisać pod kluczem produkt:125:cena aktualną cenę produktu albo pod kluczem user:42:session informacje związane z sesją użytkownika.

Redis nie musi przy tym zastępować głównej bazy danych. Bardzo często działa obok MySQL, MariaDB lub PostgreSQL. Relacyjna baza przechowuje właściwe dane aplikacji, a Redis przejmuje informacje, które warto udostępnić szybciej lub przechować tylko przez określony czas.

Przykładowy przebieg może wyglądać tak:

  • użytkownik otwiera podstronę produktu,
  • aplikacja sprawdza, czy potrzebne dane znajdują się już w Redis,
  • jeśli tak, pobiera je bez wykonywania tego samego zapytania do głównej bazy,
  • jeśli danych nie ma, aplikacja pobiera je z bazy i może zapisać wynik w Redis na potrzeby kolejnych żądań.

Takie podejście jest jednym z przykładów wykorzystania pamięci cache.

Jakie dane może przechowywać Redis?

Określenie Redis jako prostej bazy klucz–wartość nie pokazuje wszystkich jego możliwości. Pod konkretnymi kluczami można przechowywać różne struktury danych, co pozwala dopasować sposób zapisu do zadania wykonywanego przez aplikację.

  • Strings – podstawowe wartości tekstowe lub binarne, które mogą służyć np. do zapisywania wyników obliczeń lub liczników.
  • Hashes – zestawy pól i wartości, wygodne np. do przechowywania właściwości obiektu.
  • Lists – uporządkowane listy elementów, które mogą być wykorzystywane między innymi przy kolejkowaniu.
  • Sets – nieuporządkowane zbiory unikalnych elementów.
  • Sorted sets – zbiory, w których każdy element ma przypisaną wartość pozwalającą go uporządkować.
  • Streams – struktury przeznaczone do obsługi strumieni zdarzeń i komunikatów.
  • JSON – dane zapisane jako dokumenty JSON, które można przetwarzać bez traktowania całego dokumentu jako pojedynczego tekstu.

Redis obsługuje również inne struktury przeznaczone między innymi do danych geograficznych, szeregów czasowych, zastosowań probabilistycznych czy wyszukiwania wektorowego. Nie każda aplikacja potrzebuje jednak tych możliwości. Przy typowej stronie internetowej najważniejszą funkcją Redis pozostaje często szybkie przechowywanie danych podręcznych.

Do czego służy Redis?

Redis znajduje zastosowanie zarówno w prostych stronach internetowych, jak i rozbudowanych aplikacjach obsługujących dużą liczbę operacji. W zależności od projektu może pełnić jedną funkcję albo kilka jednocześnie.

Redis jako cache

To jedno z najpopularniejszych zastosowań. Aplikacja przechowuje w Redis dane, których ponowne obliczenie lub pobranie z właściwej bazy byłoby bardziej czasochłonne.

Może to być wynik zapytania do bazy, konfiguracja aplikacji, informacje o często wyświetlanych elementach albo obiekt, którego zawartość zmienia się stosunkowo rzadko. Dzięki temu przy kolejnym żądaniu można skorzystać z gotowych danych.

Sesje użytkowników

Redis może przechowywać informacje związane z aktywną sesją użytkownika, np. identyfikator zalogowanej osoby lub tymczasowy stan aplikacji. Jest to przydatne szczególnie wtedy, gdy aplikacja działa na wielu serwerach i wszystkie instancje powinny mieć dostęp do tego samego stanu sesji.

Kolejki i komunikaty

Listy oraz strumienie Redis mogą być wykorzystywane przy obsłudze kolejek i zdarzeń. Aplikacja może na przykład zapisywać zadania, które mają zostać później wykonane przez proces działający w tle.

Redis oferuje również mechanizmy komunikacji publish/subscribe. Jeden element systemu może publikować komunikaty, a inne procesy mogą je odbierać. Przy bardziej rozbudowanych systemach kolejkowych stosuje się również wyspecjalizowane rozwiązania, dlatego Redis nie jest automatycznie najlepszym wyborem dla każdego scenariusza.

Liczniki i dane czasu rzeczywistego

Redis dobrze radzi sobie z szybkimi operacjami wykonywanymi na liczbach i zbiorach. Może być używany do tworzenia liczników, rankingów, mechanizmów rate limiting czy przechowywania tymczasowych statystyk.

Przykładem może być ograniczenie liczby prób wykonania określonej operacji w krótkim czasie. Redis może przechowywać licznik oraz czas jego wygaśnięcia, dzięki czemu aplikacja szybko sprawdzi, czy użytkownik przekroczył określony limit.

Jak Redis działa w WordPressie i sklepach internetowych?

W WordPressie Redis jest często wykorzystywany jako persistent object cache. WordPress posiada mechanizm Object Cache, który pozwala przechowywać wyniki operacji wykonywanych podczas generowania strony. Bez trwałego mechanizmu cache informacje te są zwykle dostępne tylko podczas konkretnego żądania.

Po połączeniu WordPressa z Redis część obiektów może być zachowywana pomiędzy kolejnymi odsłonami. Jeśli aplikacja potrzebuje ponownie tych samych danych, może pobrać je z pamięci Redis zamiast ponownie wykonywać zapytanie do MySQL lub MariaDB.

Więcej o tym mechanizmie znajdziesz w poradniku Redis Object Cache w WordPressie.

Redis w WooCommerce

W sklepie WooCommerce liczba operacji wykonywanych na bazie może być większa niż na prostej stronie firmowej. Produkty, warianty, konfiguracja, konta klientów i część danych dotyczących sklepu są obsługiwane dynamicznie.

Persistent Object Cache może ograniczyć powtarzanie części zapytań. W przypadku większych sklepów liczy się jednak całe środowisko — konfiguracja WordPressa, wtyczki, PHP, baza danych oraz zasoby zapewniane przez hosting WooCommerce.

Redis w PrestaShop

Redis może być wykorzystywany również jako mechanizm pamięci podręcznej w PrestaShop. Odpowiednia integracja pozwala przechowywać wybrane dane poza główną bazą i ograniczać liczbę powtarzających się operacji.

Przy bardziej rozbudowanym sklepie znaczenie ma zarówno konfiguracja cache, jak i wydajność hostingu PrestaShop. Redis nie naprawi samodzielnie wolnego kodu, nieoptymalnych zapytań czy źle skonfigurowanych modułów, ale może ograniczyć część obciążenia związanego z wielokrotnym pobieraniem tych samych informacji.

Instrukcję konfiguracji dla obsługiwanych środowisk znajdziesz również w materiale pomocy Redis – działanie i konfiguracja.

Kiedy warto używać Redis?

Redis ma największy sens wtedy, gdy aplikacja wykonuje wiele powtarzalnych operacji albo regularnie potrzebuje bardzo szybkiego dostępu do tych samych informacji.

Warto rozważyć Redis, gdy:

  • te same zapytania do bazy są wykonywane wiele razy,
  • WordPress lub sklep internetowy może wykorzystać persistent Object Cache,
  • aplikacja musi szybko przechowywać i odczytywać sesje użytkowników,
  • potrzebujesz liczników, rankingów lub danych z krótkim czasem życia,
  • aplikacja korzysta z kolejek, zdarzeń albo danych czasu rzeczywistego,
  • obciążenie głównej bazy danych można ograniczyć przez przechowywanie często używanych wyników.

Redis nie jest jednak uniwersalnym sposobem na przyspieszenie każdej strony. Jeśli problemem jest ciężki kod PHP, zbyt duże obrazy, powolne zewnętrzne API albo nieoptymalne zapytania, sama instalacja Redis nie usunie źródła problemu.

W przypadku własnych aplikacji Redis można również uruchomić w bardziej elastycznym środowisku, np. na serwerze VPS. W takim wariancie konfiguracja, zabezpieczenie, aktualizacje i wykorzystanie zasobów zależą od architektury konkretnego projektu.

Czy Redis jest open source?

W przypadku aktualnych wersji odpowiedź wymaga krótkiego doprecyzowania. Od Redis 8 Redis Open Source jest dostępny na zasadzie wyboru jednej z trzech licencji: AGPLv3, RSALv2 albo SSPLv1. Licencja AGPLv3 jest licencją open source zatwierdzoną przez Open Source Initiative.

Starsze wersje Redis podlegały innym zasadom licencyjnym, dlatego przy wdrożeniach komercyjnych i rozpowszechnianiu oprogramowania warto sprawdzić aktualne informacje o licencjach Redis odpowiednie dla używanej wersji.

FAQ – Redis

Redis to szybki magazyn danych NoSQL działający przede wszystkim w pamięci RAM. Jest często wykorzystywany jako cache, magazyn sesji, mechanizm kolejkowania oraz miejsce przechowywania danych wymagających szybkiego dostępu.

Tak. Redis jest bazą danych NoSQL, choć w wielu aplikacjach działa obok głównej bazy relacyjnej i pełni przede wszystkim funkcję szybkiej warstwy cache.

Redis pracuje przede wszystkim na danych znajdujących się w pamięci RAM, ale może również zapisywać je na dysku. Służą do tego między innymi mechanizmy RDB i AOF.

Redis może przyspieszyć część operacji WordPressa dzięki persistent Object Cache. Pozwala przechowywać wyniki części operacji pomiędzy kolejnymi żądaniami i ograniczać powtarzanie tych samych zapytań do bazy. Efekt zależy jednak od konkretnej strony i jej konfiguracji.

Oba rozwiązania mogą działać jako pamięć podręczna, ale Redis obsługuje więcej struktur danych, trwałość danych, replikację oraz wiele zastosowań poza prostym cache.

Technicznie Redis może być głównym magazynem danych w niektórych aplikacjach, ale nie jest bezpośrednim zamiennikiem relacyjnej bazy. W WordPressie Redis zazwyczaj uzupełnia MySQL lub MariaDB, przechowując dane podręczne.