在讨论哪种更好之前,让我们看一下这些命令之间的区别。双方
DEL并
UNlink释放阻塞模式的重要组成部分。区别在于他们释放价值部分的方式。
DEL总是在阻塞模式下释放值部分。但是,如果该值太大,例如对于
LIST或分配过多
HASH,则会长时间阻止Redis。为了解决该问题,Redis实现了
UNlink命令,即“非阻塞”删除。
其实,
UNlink是 不是总是非阻塞/异步
。如果该值很小,例如的大小
LIST或
HASH小于
64,则该值将立即释放。这样,
UNlink与几乎相同
DEL,除了它比花费更多的函数调用
DEL。但是,如果值很大,则Redis会将值放入列表中,并且该值将由另一个线程释放,即非阻塞释放。这样,主线程必须与后台线程进行一些同步,这也是一个代价。
总之,如果该值很小,
DEL则至少等于和
UNlink。如果值非常大(例如,
LIST包含成千上万个项目),
UNlink则比更好
DEL。您始终可以安全地替换
DEL为
UNlink。但是,如果发现线程同步成为问题(多线程总是令人头疼),则可以回滚到
DEL。



