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.