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.