You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis执行UNLINK命令删除Hash时,是否将其作为整体处理?

Redis中的Hash结构示例:

ha -> {
  k1 -> v1
  k2 -> v2
  k3 -> v3
}

当执行unlink ha命令时(假设3个子键的值足够大,Redis会选择在单独线程中删除),实际的执行逻辑是怎样的?

我设想了两种可能:

  • A. 先删除键ha,之后在另一个线程中整体删除包含3个子键的整个值。
  • B. 先删除键ha以及子键k1、k2、k3,之后在另一个线程中逐个删除这3个子键对应的值。

实际执行逻辑更符合情况B,原因如下:

Redis的Hash结构底层依托哈希表(dict)实现,哈希表中存储的是各个子键值对的独立引用,而非一块连续的内存块。触发异步删除时,主线程会先将顶层键ha从全局键空间中移除,同时把包含所有子键的Hash哈希表加入异步任务队列。

在后台线程中,Redis会遍历Hash哈希表里的每一个子键值对,逐个释放每个值(v1、v2、v3)占用的内存,最后再释放Hash哈希表本身的结构内存。这和你提到的dict.c中的逻辑一致——因为每个子键的值都是独立的内存对象,必须逐个执行释放操作。

内容的提问来源于stack exchange,提问作者Eric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:19:54