1)KEYS 的算法采用O(N)复杂度的遍历算法,没有limit限制,一次性遍历所有key,属于暴力搜索。假如redis服务器存在千万级别的key数量,但是又由于redis为单线程,那么如果执行keys命令,将会造成卡顿,一段时间内无法处理其他命令,造成其他客户端阻塞。所以生产环境不可以使用
    2)SCAN命令支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像KEYS 命令、 SMEMBERS命令带来的问题 —— 当 KEYS命令被用于处理一个大的数据库时, 又或者 SMEMBERS用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。
    综上:

    • keys可一次性返回我们想要的所有key,但是若key的数量级比较大会造成阻塞
    • scan可分次返回匹配的key,不会造成阻塞,但是返回的key可能有重复,客户端需要根据需要进行去重