Преди да обсъдим коя е по-добра, нека да разгледаме разликата между тези команди. И двете DEL и UNLINK освободете ключовата част в режим на блокиране. И разликата е в начина, по който те освобождават стойностната част.
DEL винаги освобождава стойностната част в режим на блокиране. Ако обаче стойността е твърде голяма, напр. твърде много разпределения за голям LIST или HASH , блокира Redis за дълго време. За да разреши проблема, Redis внедрява UNLINK команда, т.е. „неблокиращо“ изтриване.
Всъщност, UNLINK е НЕ винаги неблокиращо/асинхронно . Ако стойността е малка, напр. размера на LIST или HASH е по-малко от 64 , стойността ще бъде освободена незабавно. По този начин UNLINK е почти същото като DEL , с изключение на това, че струва няколко повече извиквания на функции от DEL . Ако обаче стойността е голяма, Redis поставя стойността в списък и стойността ще бъде освободена от друга нишка, т.е. неблокиращата свободна. По този начин основната нишка трябва да извърши известна синхронизация с фоновата нишка и това също е цена.
В заключение, ако стойността е малка, DEL е поне толкова добър, колкото UNLINK . Ако стойността е много голяма, напр. LIST с хиляди или милиони артикули, UNLINK е много по-добре от DEL . Винаги можете безопасно да замените DEL с UNLINK . Ако обаче установите, че синхронизирането на нишките се превръща в проблем (многонишковостта винаги е главоболие), можете да се върнете към DEL .
АКТУАЛИЗИРАНЕ:
От Redis 6.0 има нова конфигурация:lazyfree-lazy-user-del . Можете да го зададете на да и Redis ще изпълни DEL команда, сякаш изпълнява UNLINK команда.