sql >> Base de Datos >  >> NoSQL >> Redis

¿El comando UNLINK siempre es mejor que el comando DEL?

Antes de discutir cuál es mejor, echemos un vistazo a la diferencia entre estos comandos. Ambos DEL y UNLINK liberar la parte clave en el modo de bloqueo. Y la diferencia es la forma en que liberan la parte de valor.

DEL siempre libera la parte de valor en modo de bloqueo. Sin embargo, si el valor es demasiado grande, p. demasiadas asignaciones para una LIST grande o HASH , bloquea Redis durante mucho tiempo. Para resolver el problema, Redis implementa el UNLINK comando, es decir, una eliminación 'sin bloqueo'.

De hecho, UNLINK es NO siempre no bloqueante/asincrónico . Si el valor es pequeño, p. el tamaño de LIST o HASH es menor que 64 , el valor se liberará inmediatamente. De esta forma, UNLINK es casi lo mismo que DEL , excepto que cuesta algunas llamadas de función más que DEL . Sin embargo, si el valor es grande, Redis coloca el valor en una lista y otro subproceso liberará el valor, es decir, el libre sin bloqueo. De esta manera, el subproceso principal tiene que sincronizarse con el subproceso de fondo, y eso también es un costo.

En conclusión, si el valor es pequeño, DEL es al menos tan bueno como UNLINK . Si el valor es muy grande, p. LIST con miles o millones de elementos, UNLINK es mucho mejor que DEL . Siempre puede reemplazar de forma segura DEL con UNLINK . Sin embargo, si encuentra que la sincronización de subprocesos se convierte en un problema (los subprocesos múltiples siempre son un dolor de cabeza), puede retroceder a DEL .

ACTUALIZACIÓN:

Desde Redis 6.0, hay una nueva configuración:lazyfree-lazy-user-del . Puede configurarlo para que sea y Redis ejecutará DEL comando como si ejecutara un UNLINK comando.