keys命令是以阻塞的方式执行的,keys是以遍历的方式,实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。
scan命令,以非阻塞的方式实现key值的查找,绝大多数情况下是可以替代keys命令的,可选性更强。
SCAN命令是一个基于游标的迭代器。
Smembers 命令返回集合中的所有的成员。(阻塞方式)
// 查询key11开头的key有哪些
keys key11*
scan 0 match key11* count 20
SMEMBERS myset1
COUNT 参数的默认值为 10
count 20中的20并不是代表输出符合条件的key,而是限定服务器单次遍历的字典槽位数量(约等于)。不是集群中的slot数量,集群中的slot数量是16384。
SCAN
SCAN 命令用于迭代当前数据库中的数据库键。
同一个元素可能会被返回多次。
如果一个元素是在迭代过程中被添加到数据集的, 又或者是在迭代过程中从数据集中被删除的, 那么这个元素可能会被返回, 也可能不会, 这是未定义的(undefined)。
zscan 遍历 zset 集合元素
hscan 遍历 hash 字典的元素
sscan 遍历 set 集合的元素