Преди да обсъдим коя е по-добра, нека да разгледаме разликата между тези команди. И двете 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
команда.