Antes de discutir qual é o melhor, vamos dar uma olhada na diferença entre esses comandos. Ambos
DEL
e UNLINK
libere a peça chave no modo de bloqueio. E a diferença é a forma como eles liberam a parte de valor. DEL
sempre libera a parte do valor no modo de bloqueio. No entanto, se o valor for muito grande, por ex. muitas alocações para uma grande LIST
ou HASH
, ele bloqueia o Redis por um longo tempo. Para resolver o problema, o Redis implementa o UNLINK
comando, ou seja, uma exclusão 'sem bloqueio'. Na verdade,
UNLINK
é NEM sempre não bloqueante/assíncrono . Se o valor for pequeno, por ex. o tamanho de LIST
ou HASH
é menor que 64
, o valor será liberado imediatamente. Desta forma, UNLINK
é quase o mesmo que DEL
, exceto que custa algumas chamadas de função a mais do que DEL
. No entanto, se o valor for grande, o Redis colocará o valor em uma lista e o valor será liberado por outro encadeamento, ou seja, o sem bloqueio. Dessa forma, o thread principal precisa fazer alguma sincronização com o thread de segundo plano, e isso também é um custo. Em conclusão, se o valor for pequeno,
DEL
é pelo menos tão bom quanto UNLINK
. Se o valor for muito grande, por ex. LIST
com milhares ou milhões de itens, UNLINK
é muito melhor que DEL
. Você sempre pode substituir DEL
com segurança com UNLINK
. No entanto, se você achar que a sincronização de threads se torna um problema (multi-threading é sempre uma dor de cabeça), você pode reverter para DEL
. ATUALIZAÇÃO:
Desde o Redis 6.0, há uma nova configuração:lazyfree-lazy-user-del . Você pode definir como sim , e o Redis executará o
DEL
comando como se estivesse executando um UNLINK
comando.