Redis
 sql >> Database >  >> NoSQL >> Redis

Il comando UNLINK è sempre migliore del comando DEL?

Prima di discutere quale sia il migliore, diamo un'occhiata alla differenza tra questi comandi. Entrambi DEL e UNLINK liberare la parte chiave in modalità di blocco. E la differenza sta nel modo in cui liberano la parte di valore.

DEL libera sempre la parte valore in modalità di blocco. Tuttavia, se il valore è troppo grande, ad es. troppe allocazioni per un LIST grande o HASH , blocca Redis a lungo. Per risolvere il problema, Redis implementa il UNLINK comando, ovvero una cancellazione 'non bloccante'.

Infatti, UNLINK è NON sempre non bloccante/asincrono . Se il valore è piccolo, ad es. la dimensione di LIST o HASH è inferiore a 64 , il valore verrà liberato immediatamente. In questo modo, UNLINK è quasi uguale a DEL , tranne per il fatto che costa qualche chiamata di funzione in più rispetto a DEL . Tuttavia, se il valore è grande, Redis inserisce il valore in un elenco e il valore verrà liberato da un altro thread, ovvero il non-blocking free. In questo modo, il thread principale deve eseguire un po' di sincronizzazione con il thread in background, e anche questo è un costo.

In conclusione, se il valore è piccolo, DEL è almeno buono come UNLINK . Se il valore è molto grande, ad es. LIST con migliaia o milioni di articoli, UNLINK è molto meglio di DEL . Puoi sempre sostituire in sicurezza DEL con UNLINK . Tuttavia, se trovi che la sincronizzazione dei thread diventi un problema (il multi-threading è sempre un mal di testa), puoi tornare a DEL .

AGGIORNAMENTO:

Da Redis 6.0, c'è una nuova configurazione:lazyfree-lazy-user-del . Puoi impostarlo su e Redis eseguirà DEL comando come se eseguisse un UNLINK comando.