sql >> Databáze >  >> NoSQL >> Redis

Je příkaz UNLINK vždy lepší než příkaz DEL?

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.



  1. MongoDB:Spočítat, kolik z jednotlivých hodnot existuje?

  2. Chyba:queryTxt ETIMEOUT při připojování k MongoDb Atlas pomocí mongoose

  3. Zálohování a obnovení MongoDB pomocí MongoDump

  4. MongoDB, Mongoose:Jak najít vnořený dokument v nalezeném dokumentu?