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.