Przejdź do treści

Redis. Wprowadzenie Dla Początkujących

Redis jest popularnym projektem open sourcowym, który od roku 2013 zyskuje coraz to większą i większą rozpoznawalność w światku IT. Dziś, w roku 2021, Redis jest znany jako NoSQL-owa baza danych klucz-wartość działająca w pamięci, a jej najpopularniejsze wykorzystanie to cache. Natomiast nie są to wszystkie zalety Redisa, ale o tym dowiesz się w dalszej części tego artykułu.


Cześć 🙂

W dzisiejszym artykule:


Czym jest Redis

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as stringshasheslistssetssorted sets with range queries, bitmapshyperloglogsgeospatial indexes, and streams. Redis has built-in replicationLua scriptingLRU evictiontransactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

Jest to opis wzięty z oficjalnej strony autorów oprogramowania. Jak wspomniano, Redis przechowuje dane w pamięci. Nie są one zapisywane na dysku, co zapewnia niezwykle szybki dostęp. Z tego też powodu, Redis jest właśnie często używany jako pamięć podręczna (cache), i/lub pomocnicza baza danych (secondary database).

Z racji, że pamięć jest ulotna, a może się zdarzyć, że nasza aplikacja ulegnie awarii, Redis pozwala podjąć pewne środki zaradcze, poprzez zapisywanie danych na dysku. Możliwość persystencji danych jest jego ogromną zaletą w porównaniu do innych providerów zapewniających cache’owanie.

Podsumowując to prostym językiem – Redis to działająca w pamięci baza klucz-wartość. Sama nazwa, Redis jest akronimem słów Remote (RE) Dictionary (DI) Server (S).


Dlaczego warto używać Redisa?

Każde oprogramowanie, jakie by nie było będzie mieć wady i zalety. Jako świadomi programiści, architekci czy inne osoby podejmujące decyzje techniczne, zanim zdecydujemy się na wybór konkretnego dostawcy oprogramowania powinniśmy rozważyć powody za i przeciw jego użyciu. W Internecie znajdziesz kilka artykułów opisujących wady i zalety Redisa [1,2] z którymi warto się zapoznać przed podjęciem decyzji. Dobrze byłoby również porozmawiać z innymi osobami, które takiego rozwiązania już używają i wyciągnąć od nich informacje/wskazówki.

W tym artykule przedstawię Ci kilka, moim zdaniem istotnych zalet Redisa.

Wydajność

Redis pozwala nawet na 120 000 żądań na sekundę! Więcej o benchmarkach można poczytać na ich stronie.

Wysoka dostępność i skalowalność

Redis oferuje architekturę typu primary-replica w pojedynczym węźle lub w topologii klastrowej. Pozwala to na tworzenie wysoce dostępnych rozwiązań zapewniających stałą wydajność i niezawodność. W przypadku konieczności dostosowania rozmiaru klastra, dostępne są również różne opcje skalowania i powiększania lub zmniejszania. Pozwala to na rozwój klastra wraz z potrzebami.

Replikacja i Trwałość (Durability)

Redis obsługuje replikację asynchroniczną, w której dane mogą być replikowane na wielu serwerach replik. Zapewnia to lepszą wydajność odczytu (ponieważ żądania mogą być dzielone między serwery) i szybsze odzyskiwanie w przypadku awarii serwera głównego. W celu zachowania trwałości Redis obsługuje kopie zapasowe w określonym momencie (kopiowanie danych na dysk).

Prostota i łatwość obsługi

Redis upraszcza kod, umożliwiając zapisanie mniejszej ilości linii kodu do przechowywania, dostępu i korzystania z danych w aplikacjach. Posiada natywne struktury danych i wiele opcji do manipulacji i interakcji z danymi. Obsługuje wiele języków oprogramowania, m.in: Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go i wiele innych. Również popularne frameworki wspierają prostą integrację z Redisem.

Rozszerzalność

Redis jest projektem open source. Jest oparty na standardach, obsługuje różne formaty danych i posiada bogaty zestaw klientów.


Do czego stosować?

Spora część czytelników zapewne odpowie, że Redisa wykorzystujemy jako pamięć cache i kropka. Sam bym tak odpowiedział gdybym nie pisał tego artykułu :). Jednak Redis może być wykorzystany szerzej. Jasne, wykorzystanie go jako cache jest ogromną zaletą, ale poznajmy też inne możliwości, aby w przyszłości móc rozważyć użycie Redisa również w innych aspektach.

Caching

Redis jest doskonałym wyborem do implementacji wysoce dostępnej pamięci podręcznej w celu zmniejszenia opóźnień w dostępie do danych oraz odciążenia bazy danych i aplikacji. Może obsługiwać często wymagane elementy w czasie krótszym niż milisekunda i umożliwia łatwe skalowanie dla większych obciążeń bez zwiększania kosztu backendu.

Chat, messaging, and queues

Redis obsługuje wzorzec Pub/Sub i różne struktury danych, takie jak listy, posortowane zbiory i hashe. Dzięki temu Redis może obsługiwać wysokowydajne czaty, strumienie komentarzy w czasie rzeczywistym, kanały mediów społecznościowych i komunikację między serwerami. Listy ułatwiają również wdrożenie kolejek. Oferują zarówno operacje atomowe, jak i możliwości blokowania, dzięki czemu nadają się do różnych zastosowań, które wymagają niezawodnego brokera wiadomości.

Gaming leaderboards

Redis wykonuje niesamowitą pracę w inkrementacji i dekrementacji, ponieważ jest w pamięci. Zbiory (Sets) i posortowane zbiory (Sorted Sets) ułatwiają nam również życie, gdy próbujemy wykonywać tego typu operacje, a tak się składa, że Redis oferuje obie te struktury danych. Przykładowo aby wyciągnąć 10 najlepszych użytkowników z posortowanego zestawu – nazwiemy go „user_scores” – można po prostu uruchomić następujące polecenie:

Rich media streaming

Redis może być używany do przechowywania metadanych o profilach użytkowników i ich historii przeglądania, informacji uwierzytelniających/tokenów dla milionów użytkowników, plików manifestów aby umożliwić CDN-om strumieniowe przesyłanie wideo do milionów użytkowników mobilnych i webowych w tym samym czasie.


Let’s play it

Ok. Przeszliśmy przez sekcje teoretyczne. Teraz czas na trochę zabawmy z samym Redisem z poziomu klienta. W świecie rzeczywistym raczej rzadko (o ile w ogóle) będziesz używał klienta z poziomu konsoli. Częściej będzie to zwyczajnie klient, w języku programowania w jakim rozwijasz aplikacje.

Chcąć pobawić się Redisem, mamy dwie opcje:

    1. Używamy wersji webowejTry Redis
    2. Stawiamy kontener dockerowy

Opcja 1 jest prosta, wystarczy wejść w link i można wprowadzać komendy. Opcja 2 wymaga nieco większego wysiłku. Po pierwsze, trzeba mieć zainstalowanego dockera a następnie należy wprowadzić dwa polecenia. Pierwsze, uruchamiające Redisa:

oraz drugie, odpalające klienta:

Teraz w kliencie śmiało można uruchamiać komendy, co będzie miało taki sam rezultat jak byśmy używali wersji webowej.

Redis zapewnia kilka struktur danych oraz zbiór komend ułatwiających manipulację na danych. Aby lepiej poznać jego możliwości przejdźmy przez podstawowe. Polecam wklepać komendy do konsoli i obserwować rezultaty. Niby dużo to nie daje, ale coś w głowie zostanie 🙂

Strings

Stringi są najbardziej podstawową strukturą danych. Są binarnie bezpieczne, to znaczy, że mogą zawierać dowolny rodzaj danych, na przykład obraz JPEG lub serializowany obiekt Rubiego. Wartość String może mieć długość maksymalnie 512 megabajtów.

Lists

Listy to po prostu listy stringów, posortowane według kolejności wstawiania. Możliwe jest dodawanie nowych elementów na początek listy (head) lub na jej końcu (tail). Maksymalna długość listy wynosi (2^32) – 1 elementów (4294967295, ponad 4 miliardy elementów na listę).

Hashes

Hashes to mapy pomiędzy polami i wartościami string. Są one idealnym typem danych do reprezentowania obiektów (np. użytkownik z wieloma polami takimi jak imię, nazwisko, wiek itp.)

Sets

Zbiory to nieuporządkowana kolekcja stringów. Możliwe jest dodawanie, usuwanie i sprawdzanie istniejących wartości w stałym czasie (O(1)) niezależnie od ilości elementów zawartych w zbiorze. Maksymalna wielkość zbioru jest taka sama jak w przypadku listy.

Sorted Sets

Posortowane zbiory, podobnie jak zwykłe zbiory są niepowtarzającymi się kolekcjami stringów. Różnica polega na tym, że każdy element posortowanego zbioru ma przypisany wynik (score), który jest używany w celu uporządkowania zestawu, od najmniejszego do największego wyniku. Podczas gdy elementy w zbiorze są unikalne, wyniki (score) mogą się powtarzać!


Podsumowanie

Redis jako oprogramowanie z pewnością jest warte użycia. Korzyści płynące z wydajności wydają się jednym z głównych powodów dlaczego miałbyś użyć właśnie tego rozwiązania. Dodatkowy fakt, że jest to projekt open-source, posiadający aktywne community i mający wiele klientów w różnych językach programowania również przemawia.

Na tę chwilę (na całe szczęście) nie mam żadnych nieprzyjemnych doświadczeń z Redisem. Jeżeli masz jakieś, podziel się tym w komentarzu. Na pewno jest to ciekawy temat do eksploracji, aby zastanowić się jak używać, czego próbowali inni i na co uważać na przyszłość.

Źródła:

5 2 votes
Article Rating
Subscribe
Powiadom o
guest
5 komentarzy
najnowszy
najstarszy oceniany
Inline Feedbacks
View all comments
Karol
Karol
3 lat temu

rozumiem, że w komentarzu miało być 1995?

Paweł
Paweł
3 lat temu

Dzięki za wprowadzenia, bardzo fajny artykuł, pozdrawiam 🙂

Grzegorz
Grzegorz
3 lat temu

Super, jasno, prosto i przystępnie, dzięki za taki opis 🙂

5
0
Would love your thoughts, please comment.x