Valkey 8.1: fork Redis oferuje wydajność, ulepszenia pamięci i nowe moduły

Dolina

Zostało to ogłoszone wydanie nowej wersji «Valkey 8.1», fork Redis, który narodził się po przejściu na licencję własnościową i który ma na celu utrzymanie otwartej filozofii oryginalnego projektu.

Valkey 8.1 Zawiera wiele ulepszeń i zmian, którego głównym obszarem zainteresowań jest optymalizacja wydajności, która zmniejsza opóźnienia, zwiększa efektywność pamięci i wprowadza nowe możliwości modułowe.

Najważniejsze nowe funkcje w Valkey 8.1

jeden z najważniejszych zmian w tej wersji jest całkowite przepisanie tablicy skrótów, stosowane zarówno w przechowywaniu danych typu klucz-wartość, jak i w ustrukturyzowanych typach danych, takich jak Hash, Set i Sorted Set. Dzięki temu przeprojektowaniu, Osiągnięto redukcję wykorzystania pamięci: 20 bajtów mniej na klucz bez TTL, i do 30 bajtów, jeśli klucz ma określony czas życia. Ponadto zmniejszenie losowego dostępu do pamięci doprowadziło do 10% wzrostu wydajności w środowiskach wejścia/wyjścia jednowątkowych.

Kolejną nową funkcją w Valkey 8.1 jest iteracja po klawiszach w operacjach, takich jak polecenie KEYS lub Transfer kluczy między węzłami w klastrze obejmuje teraz system wstępnego ładowania pamięci podręcznej, co umożliwia dostępność kolejnego klucza przed rozpoczęciem przetwarzania. Takie podejście zwiększyło prędkość wyszukiwania klucza 3,5-krotnie dzięki lepszemu wykorzystaniu pamięci podręcznej procesora.

Ulepszenia wielowątkowego wejścia/wyjścia i TLS

Valkey kontynuuje przejście na wielowątkowy model wejścia/wyjścia. Teraz, Przetwarzanie połączenia TLS odbywa się w oddzielnych strumieniach, co potroiło zdolność przyjmowania nowych połączeń. Funkcje takie jak SSL_pending() i ERR_clear_error() zostały również wyizolowane do osobnych wątków, co zaowocowało 10-procentowym wzrostem wydajności operacji SET i 22-procentowym wzrostem wydajności operacji GET.

Ulepszono replikację, zwłaszcza w środowiskach z aktywnym protokołem TLS, eliminując zbędne operacje, takie jak niepotrzebne sumy kontrolne. Zaowocowało to 18-procentową poprawą pełnej synchronizacji podczas replikacji bezdyskowej i 47-procentową redukcją kosztów operacji kopiowania i zapisu.

Optymalizacje na zbiorach uporządkowanych i typach probabilistycznych

El Polecenie ZRANK dla uporządkowanych zestawów został zoptymalizowany i Teraz jest o 45% szybszy, podczas gdy ZADD przyjął instrukcje SIMD aby osiągnąć większą wydajność. W przypadku typów danych probabilistycznych udoskonalono wykorzystanie funkcji HyperLogLog, która wykorzystuje tylko 12 KB pamięci stałej, a użycie instrukcji AVX2 pozwoliło na zwiększenie wydajności operacji PFMERGE i PFCOUNT nawet 12-krotnie, a operacji BITCOUNT nawet 5-krotnie.

Nieprzerwana aktywna defragmentacja i większa kontrola nad rejestrami

El ulepszono również system aktywnej defragmentacji aby uniknąć blokad i opóźnień. Teraz każdy cykl defragmentacji trwa tylko 500 mikrosekund, wdrożono strategię przeciwdziałania głodowaniu, aby zapobiec odkładaniu tych zadań z powodu długoterminowych operacji.

Zostały wprowadzone Nowe opcje konfiguracji formatowania rekordów, w tym niestandardowe formaty czasu i nowy tryb COMMANDLOG, który rejestruje długie żądania i odpowiedzi. Dodatkowo polecenie LATENCY LATEST rozszerzono o nowe metryki, zapewniając większą przejrzystość rejestrowanych opóźnień szczytowych i wolumenowych.

Nowe funkcje, moduły i wsparcie

Dolina teraz umożliwia wykonanie operacji SET IFEQ, który warunkuje zapis klucza do bieżącej wartości. Również Wprowadzono modułowe wsparcie dla silników skryptowych, otwierając możliwość korzystania z języków alternatywnych do Lua poprzez niestandardowe moduły.

W tej wersji również debiutuje kilka modułów:

  • Moduł wyszukiwania (Google): Wyszukiwarka podobieństwa wektorów, idealna do zastosowań uczenia maszynowego wymagających niskiego opóźnienia i wysokiej przepustowości.
  • Moduł JSON (AWS): umożliwia bezpośrednią manipulację fragmentami dokumentu JSON, unikając całkowitego przetwarzania zawartości po stronie klienta.
  • Moduł filtra Blooma (AWS): Implementacja filtrów Blooma, przydatnych do określania możliwej przynależności elementu do zestawu, z wydajnością probabilistyczną

Wreszcie, jeśli chcesz dowiedzieć się więcej na ten temat, możesz zapoznać się ze szczegółami w następujący link.