小编典典

UNLINK命令是否总是比DEL命令好?

redis

在Redis 4.0中,有一个新命令UNLINK删除Redis内存中的密钥。

此命令与DEL非常相似:它将删除指定的密钥。与DEL一样,如果密钥不存在,则将其忽略。但是,该 命令在不同的线程中执行实际的内存回收
因此当DEL为时它不会阻塞 。这就是命令名称的来源:该命令只是将键与键空间断开链接。实际的删除将在以后异步发生。

因此,可以始终(100%次)使用UNLINK而不是DEL,因为UNLINK是非阻塞的,与DEL不同,对吗?


阅读 659

收藏
2020-06-20

共1个答案

小编典典

在讨论哪种更好之前,让我们看一下这些命令之间的区别。双方DELUNLINK释放阻塞模式的重要组成部分。区别在于他们释放价值部分的方式。

DEL总是在阻塞模式下释放值部分。但是,如果该值太大,例如对于LIST或分配过多HASH,则会长时间阻止Redis。为了解决该问题,Redis实现了UNLINK命令,即“非阻塞”删除。

其实,UNLINK不是总是非阻塞/异步
。如果该值很小,例如的大小LISTHASH小于64,则该值将立即释放。这样,UNLINK与几乎相同DEL,除了它比花费更多的函数调用DEL。但是,如果值很大,则Redis会将值放入列表中,并且该值将由另一个线程释放,即非阻塞释放。这样,主线程必须与后台线程进行一些同步,这也是一个代价。

总之,如果该值很小,DEL则至少等于和UNLINK。如果值非常大(例如,LIST包含成千上万个项目),UNLINK则比更好DEL。您始终可以安全地替换DELUNLINK。但是,如果发现线程同步成为问题(多线程总是令人头疼),则可以回滚到DEL

2020-06-20