UNLINK:以异步方式移除指定的键
在前面一节,我们介绍了如何使用 DEL
命令去移除指定的键,但这个命令实际上隐含着一个性能问题:因为 DEL
命令会以同步方式执行移除操作,所以如果待移除的键非常庞大又或者数量众多,那么服务器在执行移除操作的过程中就有可能会被阻塞。比如说,移除一个包含上百万个元素的集合,移除一个包含数十万个键值对的散列,又或者一次移除成千上万个键,都有可能会引起服务器阻塞。
为了解决这个问题,Redis 从 4.0 版本开始新添加了一个 UNLINK
命令:
- UNLINK key [key ...]
UNLINK
命令跟 DEL
命令一样,都可以用于移除指定的键,但它跟 DEL
命令的区别在于,当用户调用 UNLINK
命令去移除一个数据库键的时候,UNLINK
只会在数据库里面移除对该键的引用(reference),而对键的实际移除操作则会交给后台线程执行,因此 UNLINK
命令将不会造成服务器阻塞。
跟 DEL
命令一样,UNLINK
命令也会返回被移除键的数量作为结果。此外,由于兼容方面的原因,Redis 将在提供异步移除操作 UNLINK
命令的同时,继续提供同步移除操作 DEL
命令。
以下是一个使用 UNLINK
命令的例子:
- redis> MGET k1 k2 k3
- 1) "v1"
- 2) "v2"
- 3) "v3"
- redis> UNLINK k1 k2 k3
- (integer) 3
- redis> MGET k1 k2 k3
- 1) (nil)
- 2) (nil)
- 3) (nil)
其他信息
属性 | 值 |
---|---|
复杂度 | O(N),其中 N 为被移除键的数量。 |
版本要求 | UNLINK 命令从 Redis 4.0 版本开始可用。 |