Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Czy polecenie UNLINK jest zawsze lepsze niż polecenie DEL?

Zanim omówimy, który z nich jest lepszy, przyjrzyjmy się różnicy między tymi poleceniami. Oba DEL i UNLINK uwolnij kluczową część w trybie blokowania. Różnica polega na tym, jak uwalniają część wartościową.

DEL zawsze zwalnia część wartości w trybie blokowania. Jeśli jednak wartość jest zbyt duża, np. zbyt wiele alokacji dla dużej LIST lub HASH , blokuje Redis na długi czas. Aby rozwiązać ten problem, Redis implementuje UNLINK polecenie, tj. usuwanie „bez blokowania”.

W rzeczywistości UNLINK jest NIE zawsze nie blokuje/asynchronicznie . Jeśli wartość jest mała, np. rozmiar LIST lub HASH jest mniejsze niż 64 , wartość zostanie natychmiast zwolniona. W ten sposób UNLINK jest prawie taki sam jak DEL , z wyjątkiem tego, że kosztuje kilka wywołań funkcji więcej niż DEL . Jeśli jednak wartość jest duża, Redis umieszcza wartość na liście, a wartość zostanie zwolniona przez inny wątek, tj. Nieblokujący wolny. W ten sposób główny wątek musi wykonać pewną synchronizację z wątkiem w tle, a to również kosztuje.

Podsumowując, jeśli wartość jest mała, DEL jest co najmniej tak dobry jak UNLINK . Jeśli wartość jest bardzo duża, np. LIST z tysiącami lub milionami elementów, UNLINK jest znacznie lepszy niż DEL . Zawsze możesz bezpiecznie zastąpić DEL z UNLINK . Jeśli jednak okaże się, że synchronizacja wątków staje się problemem (wielowątkowość jest zawsze bolesna), możesz cofnąć się do DEL .

AKTUALIZACJA:

Od wersji Redis 6.0 dostępna jest nowa konfiguracja:lazyfree-lazy-user-del . Możesz ustawić go na tak , a Redis uruchomi DEL polecenie tak, jakby uruchamiał UNLINK polecenie.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Współbieżność Redis INCR

  2. SignalR nie może połączyć się z usługą Azure Redis przez SSL

  3. Łączenie z Redis działającym w kontenerze Docker z komputera hosta

  4. Błąd polecenia klastrowania Redis Enterprise „CLUSTER”

  5. Jaka jest różnica między StackExchange.Redis i StackExchange.Redis.StrongName?