redis del命令的时间复杂度是多少?

时间:2017-03-22 12:12:31

标签: redis

关于del命令的官方文档:

  

时间复杂度:O(N)其中N是要删除的键数。当要删除的键保存除字符串以外的值时,此键的单个复杂度为O(M),其中M是列表,集合,有序集或散列中的元素数。删除包含字符串值的单个键是O(1)。

为什么呢?我认为即使密钥指的是复杂类型,del的时间复杂度也应该始终为O(1).redis db找到密钥的哈希值并将其删除,操作时间复杂度为O(1)。< / p>

在redis源代码中,“del命令”的实现如下:

-00:30

如上所述,删除1个密钥应具有O(1)的复杂度,无论复杂类型如何。

1 个答案:

答案 0 :(得分:3)

删除1个密钥的复杂度为O(1)。删除5个密钥,复杂度为O(5)(如文档中所述 - &gt; O(N))。但是如果密钥引用了复杂类型,例如列表,Redis也需要删除该列表中的所有内容,而不仅仅是引用列表的密钥。如果它只是删除密钥,列表仍将使用内存。

Redis中的列表,散列,集合等不会被实现为反序列化,修改,序列化和再次存储的“字符串”(这将不是高性能并且使用更多内存),而是作为高度优化的结构。为了获得Redis提供的性能和小内存打印,有一个“权衡”,删除操作不总是O(N),而是O(N * M)。