redis命令SISMEMBER set1 member1
如何复杂度为O(1),因为它应扫描整个集合以识别“member1”?
答案 0 :(得分:1)
因为它使用哈希表。
集合中的每个元素都将被散列为32位字符串,如:fc5e038d38a57032085441e7fe7010b0
。对于不同的字符串,32位字符串将始终不同。无论原始字符串有多长,散列字符串总是32位长。
当redis想知道字符串是否在集合中时,它首先散列原始字符串,然后检查32位字符串是否在集合中。
例如," helloworld"的32位字符串。是fc5e038d38a57032085441e7fe7010b0
,如果redis想检查" helloworld"在一个集合中,然后结果会检查fc5e038d38a57032085441e7fe7010b0
是否在集合中。
就像你在字典中寻找一个单词一样。
f
c
的所有字符串。5
的所有字符串。因此,无论原始字符串有多长,redis最多会查询32次,是否可以知道原始字符串是否在一个集合中。
因此,复杂性为O(1)