SCAN命令保证在整个迭代期间一直存在于数据库中的键一定会被返回。如果一个元素是在迭代过程中被添加到数据集的, 又或者是在迭代过程中从数据集中被删除的, 那么这个元素可能会被返回, 也可能不会, 这是未定义的。
SCAN命令可能会将一个键返回多次,由应用程序处理重复的元素。
Redis中提供了几个类似的命令用于遍历大集合:
SSCAN: 遍历集合(set)
HSCAN: 遍历哈希表(hash)
ZSCAN: 遍历有序集合(zset), 包括元素成员和元素分值
127.0.0.1:6379> zadd z 1 a 2 b 3 c (integer) 0 127.0.0.1:6379> zscan z 0 1) "0" 2) 1) "a" 2) "1" 3) "b" 4) "2" 5) "c" 6) "3" HyperLogLog一个集合中不重复元素的个数称为集合的基数,如集合{a, b, c}的基数为3。
HyperLogLog是一种估计大集合基数的算法,Redis封装了该算法:
PFADD命令将元素添加到HyperLogLog中:
PFADD key element [element ...]PFCOUNT命令返回基数估计值,当给定了多个key时则返回它们基数之和(不是并集的基数):
PFCOUNT key [key ...]PFMERGE命令将多个HyperLogLog合并,destKey的基数即为sourceKey并集的基数:
PFMERGE destkey sourcekey [sourcekey ...]