Redis unlink hash -hash是否被视为一个整体?

rkttyhzu  于 2023-06-21  发布在  Redis
关注(0)|答案(1)|浏览(148)

例如:在redis中,hash是:

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

unlink ha时,redis实际上是如何删除它的?

  • (假设3个子键的值足够大,可以让redis决定在单独的线程中删除它们)。*
    我可以想象的可能方式:
  • A.删除单个键ha,然后在另一个线程中删除整个值(包括3个子键)。
  • B.删除键ha和子键k1k2k3。然后删除3个值的子键?

那么到底是哪种情况,还是有更多种方式呢?

Redis相关源代码

https://github.com/redis/redis/blob/3ca451c46fed894bf49e7561fa0282d2583f1c06/src/dict.c#L553
根据上面的代码,似乎它更像是案例B。
这是有意义的,因为哈希表存储对值的引用,而不是在单个内存块中,因此需要逐个释放值,对吗?

mqkwyuun

mqkwyuun1#

当你调用unlink来删除一个键(hash或其他结构)时,Redis会从数据库中删除它(键,子键和值),并将其放入一个待删除列表中。将有一个后台作业从另一个线程删除这些延迟删除的项。当Redis执行真实的的删除任务时,它会删除键的所有内容(键、子键和值)。

相关问题