Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

O comando UNLINK é sempre melhor que o comando DEL?


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.