Ukazała się premiera systemu DBMS Redis 7.0, należącego do klasy systemów NoSQL. Redis zapewnia funkcje przechowywania danych klucz/wartość, wzmocnione obsługą formatów danych strukturalnych, takich jak listy, skróty i zestawy, a także możliwość uruchamiania procedur obsługi skryptów po stronie serwera w Lua. Kod projektu jest dostarczany na licencji BSD. Dodatkowe moduły oferujące zaawansowane możliwości dla użytkowników korporacyjnych, takie jak RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, od 2019 roku dostarczane są w ramach autorskiej licencji RSAL. Projekt GoodFORM, który ostatnio przeżywa stagnację, próbował kontynuować rozwój otwartych wersji tych modułów w ramach licencji AGPLv3.
W przeciwieństwie do systemów przechowywania w pamięci, takich jak Memcached, Redis zapewnia trwałe przechowywanie danych na dysku i gwarantuje, że baza danych pozostanie nienaruszona w przypadku awarii. Kod źródłowy projektu rozpowszechniany jest na licencji BSD. Biblioteki klienckie są dostępne dla najpopularniejszych języków, w tym Perl, Python, PHP, Java, Ruby i Tcl. Redis obsługuje transakcje, które pozwalają na wykonanie grupy poleceń w jednym kroku, zapewniając spójność i spójność (polecenia z innych żądań nie mogą zakłócać) w wykonaniu danego zestawu poleceń, a w przypadku problemów umożliwiając wycofanie zmiany. Wszystkie dane są w pełni buforowane w pamięci RAM.
Do zarządzania danymi służą takie polecenia, jak zwiększanie/zmniejszanie, standardowe operacje na listach i zbiorach (suma, przecięcie), zmiana nazwy klawiszy, wielokrotny wybór i funkcje sortowania. Obsługiwane są dwa tryby przechowywania: okresowa synchronizacja danych na dysku oraz utrzymywanie dziennika zmian na dysku. W drugim przypadku zapewnione jest całkowite bezpieczeństwo wszelkich zmian. Istnieje możliwość zorganizowania replikacji danych master-slave na kilka serwerów, realizowanej w trybie nieblokującym. Dostępny jest także tryb przesyłania wiadomości „publikuj/subskrybuj”, w którym tworzony jest kanał, z którego wiadomości są dystrybuowane do klientów w ramach subskrypcji.
Kluczowe zmiany w Redis 7.0:
- Dodano obsługę funkcji po stronie serwera. W przeciwieństwie do wcześniej obsługiwanych skryptów w języku Lua, funkcje nie są przypisane do aplikacji i mają na celu zaimplementowanie dodatkowej logiki rozszerzającej możliwości serwera. Funkcje przetwarzane są nierozerwalnie z danymi i w powiązaniu z bazą danych, a nie z aplikacją, łącznie z replikacją i przechowywaniem w pamięci trwałej.
- Zaproponowano drugą edycję listy ACL, która umożliwia kontrolę dostępu do danych w oparciu o klucze oraz pozwala na zdefiniowanie różnych zestawów reguł dostępu do poleceń z możliwością powiązania kilku selektorów (zestawów uprawnień) z każdym użytkownikiem. Do każdego klucza można przypisać określone uprawnienia, np. można ograniczyć dostęp wyłącznie do odczytu lub zapisu określonego podzbioru kluczy.
- Dostępna jest partycjonowana (fragmentowana) implementacja paradygmatu dystrybucji komunikatów Publikuj-Subskrybuj działająca w klastrze, w której komunikat jest wysyłany do określonego węzła, do którego podłączony jest kanał komunikatów, po czym komunikat ten jest przekierowywany do pozostałych zawartych węzłów w odłamku. Klienci mogą odbierać wiadomości subskrybując kanał, zarówno łącząc się z węzłem głównym, jak i z węzłami drugorzędnymi sekcji. Sterowanie odbywa się za pomocą poleceń SSUBSCRIBE, SUNSUBSCRIBE i SPUBLISH.
- Dodano obsługę przetwarzania podpoleceń w większości kontekstów.
- Dodano nowe polecenia:
- ZMPOP, BZMPOP.
- LMPOP, BLMPOP.
- SINTERCARD, ZINTERCARD.
- SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
- CZAS WAŻNOŚCI, CZAS WAŻNOŚCI.
- EVAL_RO, EVALSHA_RO, SORT_RO.
- FUNKCJA *, FCALL, FCALL_RO.
- DOKUMENTY POLECEŃ, LISTA POLECEŃ.
- HISTOGRAM OPÓŹNIENIA.
- FRAGMENTY KLASTRA, ŁĄCZA KLASTRA, KLASTER DELSLOTSRANGE, KLASTER ADDSLOTSRANGE.
- BRAK EKSMICJI KLIENTA.
- OSUSZANIE ACL.
- Dodano możliwość jednoczesnego przetwarzania wielu konfiguracji w jednym wywołaniu CONFIG SET/GET.
- Do narzędzia redis-cli dodano opcje „-json”, „-2”, „-scan”, „-functions-rdb”.
- Domyślnie dostęp klienta do ustawień i poleceń mających wpływ na bezpieczeństwo jest wyłączony (przykładowo wyłączone są polecenia DEBUG i MODULE, zabroniona jest zmiana konfiguracji z flagą PROTECTED_CONFIG). Redis-cli nie wysyła już poleceń zawierających wrażliwe dane do pliku historii.
- Wprowadzono dużą część optymalizacji mających na celu zwiększenie wydajności i zmniejszenie zużycia pamięci. Na przykład zużycie pamięci zostało znacznie zmniejszone podczas włączania trybu klastra, podczas wykonywania operacji kopiowania przy zapisie oraz podczas pracy ze skrótami i kluczami zset. Ulepszona logika opróżniania danych na dysk (wywołanie fsync). Zmniejszono liczbę pakietów sieciowych i wywołań systemowych podczas wysyłania odpowiedzi do klienta. Poprawiono wydajność replikacji.
- Naprawiono lukę CVE-2022-24735 w środowisku wykonywania skryptów Lua, która pozwala na podstawienie własnego kodu Lua i osiągnięcie jego wykonania w kontekście innego użytkownika, w tym z wyższymi uprawnieniami.
- Naprawiono lukę CVE-2022-24736, która umożliwia awarię procesu serwera redis z powodu wyłuskiwania wskaźnika NULL. Atak odbywa się poprzez załadowanie specjalnie zaprojektowanych skryptów Lua.
Źródło: opennet.ru