Než budeme diskutovat o tom, který z nich je lepší, podívejme se na rozdíl mezi těmito příkazy. Oba DEL
a UNLINK
uvolněte klíčovou část v režimu blokování. A rozdíl je ve způsobu, jakým uvolňují hodnotovou část.
DEL
vždy uvolní část hodnoty v režimu blokování. Pokud je však hodnota příliš velká, např. příliš mnoho alokací pro velký LIST
nebo HASH
, blokuje Redis na dlouhou dobu. Za účelem vyřešení problému Redis implementuje UNLINK
příkaz, tj. „neblokující“ smazání.
Ve skutečnosti UNLINK
je NE vždy neblokující/asynchronní . Pokud je hodnota malá, např. velikost LIST
nebo HASH
je menší než 64
, hodnota bude okamžitě uvolněna. Tímto způsobem UNLINK
je téměř stejný jako DEL
, kromě toho, že to stojí několik volání funkcí více než DEL
. Pokud je však hodnota velká, Redis vloží hodnotu do seznamu a hodnota bude uvolněna jiným vláknem, tj. neblokujícím volným. Tímto způsobem musí hlavní vlákno provést určitou synchronizaci s vláknem na pozadí, což také stojí.
Na závěr, pokud je hodnota malá, DEL
je přinejmenším stejně dobrý jako UNLINK
. Pokud je hodnota velmi velká, např. LIST
s tisíci nebo miliony položek UNLINK
je mnohem lepší než DEL
. DEL
můžete vždy bezpečně nahradit pomocí UNLINK
. Pokud však zjistíte, že se synchronizace vláken stává problémem (více vláken je vždy bolestí hlavy), můžete se vrátit zpět na DEL
.
AKTUALIZACE:
Od Redis 6.0 je k dispozici nová konfigurace:lazyfree-lazy-user-del . Můžete jej nastavit na ano a Redis spustí DEL
příkaz, jako by spouštěl UNLINK
příkaz.