Czym jest baza danych Redis?

W odróżnieniu od klasycznych, relacyjnych baz danych takich jak PostgreSQL, Oracle czy MariaDB, które umożliwiają modelowanie złożonych danych składowanych na dysku z zachowaniem właściwości ACID, baza Redis umożliwia wydajne przechowywanie relatywnie prostych struktur danych w pamięci operacyjnej. Takie podejście czyni Redisa bardzo wydajnym w zestawieniu z klasycznymi bazami danych OLTP, przez co bardzo często wykorzystywany jest on obok nich w celu poprawy wydajności całego systemu.

Redis jako pamięć podręczna odczytu z bazy danych

Jednym z najczęstszych zastosowań bazy Redis w naszych projektach softwareowych jest pamięć podręczna odczytu. Ta technika pozwala na zmniejszenie obciążenia relacyjnej bazy danych przez zapisywanie wyników najczęstszych operacji odczytu w Redisie. Jej działanie można bardzo łatwo zilustrować przykładową aplikacją typu marketplace, w której użytkownicy mogą przeglądać oferty dotyczące przedmiotów lub usług. Doświadczenie uczy, że do popularności poszczególnych ofert w aplikacjach tego typu ma zastosowanie rozkład Pareta, na podstawie którego można spodziewać się następującej obserwacji:

W aplikacji typu marketplace 90% ruchu użytkowników generowane będzie przez 10% najpopularniejszych ofert.

Aby ograniczyć obciążenie relacyjnej bazy spowodowane ciągłym odczytywaniem tych samych danych produktów, rezultaty operacji odczytu mogą być zapisane w bazie Redis jako w pamięci podręcznej, tak aby kolejne zapytania oczekujące danych konkretnego produktu serwowane były z Redisa omijając przy tym bazę OLTP, w rezultacie zmniejszając jej obciążenie.

Zastosowanie bazy Redis do rate limitingu API

Innym zastosowaniem bazy Redis w projektach softwareowych jest tzw. rate limiting, czyli technika mająca na celu zabezpieczenie aplikacji serwerowych przed atakami DDoS, w których atakujący wysyłają znaczny wolumen sztucznie generowanych zapytań do serwera mając na celu doprowadzenie do jego przeciążenia i spowodowanie przerwy w dostępności usługi. Ponieważ w większości przypadków, aplikacje serwerowe są skalowalne horyzontalnie, to relacyjna baza danych najczęściej staje się wydajnościowym wąskim gardłem całego systemu podczas ataku DDoS. Technika rate limitingu polega na zapisywaniu adresów IP, z których pochodzą zapytania w relatywnie szybkiej bazie takiej jak Redis, tak aby wykryć klientów generujących nienaturalnie duże obciążenie systemu i przechwytywać ich zapytania, zanim te spowodują wykonanie operacji odczytu w znacznie wolniejszej bazie danych OLTP, tym samym zwiększając odporność systemu na ataki DDoS.

Redis jako pamięć podręczna zapisu do bazy danych

Ostatnie z najczęstszych zastosowań bazy danych Redis jest komplementarne z pierwszym z omówionych. Technika pamięci podręcznej zapisu ma na celu zmniejszenie obciążenia generowanego w bazie danych OLTP często wykonywanymi operacjami. Wyobraźmy sobie, że tworzymy system mający na celu zbierać statystyki dotyczące wyświetlanych przez użytkowników ogłoszeń. Zapisywanie każdego zdarzenia wyświetlenia oferty bezpośrednio w bazie OLTP doprowadziłoby od jej znacznego obciążenia. Aby je zmniejszyć, technika pamięci podręcznej zapisu zakłada buforowanie takich zdarzeń w szybkiej bazie rezydującej w pamięci operacyjnej takiej jak Redis. Zbuforowane zdarzenia są następnie cyklicznie zapisywane w bazie danych w postaci zagregowanej, tak aby zmniejszyć jej obciążenie.