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 sì e Redis eseguirà DEL
comando come se eseguisse un UNLINK
comando.