1. 语法

SCAN cursor [MATCH pattern] [COUNT count]

2. 用途

SCAN 命令用于迭代当前数据库中的数据库键。

3. 相似命令

SSCAN 命令用于迭代集合键中的元素
HSCAN 命令用于迭代哈希键中的键值对
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)

4. 使用

SCAN 命令是一个基于游标的迭代器(cursor based iterator): SCAN 命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。

当 SCAN 命令的游标参数被设置为 0 时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为 0 的游标时, 表示迭代已结束。

scan 命令返回两个元素,第一个元素进行下一次迭代的新游标,第二个是匹配的key

scan 0 match "goods_comment:*" count 10000

5. 示例

redis中存在大量的key,无法直接重启,但是又没有触发淘汰策略,通过scan命令移除key

public function actionClearKey()
{
    $len = 10000;
    $redis = Yii::$app->redis;
    $cursor = 0;
    for ($i=0;$i<=$len;$i++) {
        $keys = $redis->scan($cursor,"match","page_view🆔*");
        var_dump($keys);
        $redis_keys = $keys[1];
        $cursor = $keys[0];
        foreach ($redis_keys as $key => $redis_key) {
            echo $redis_key."\r\n";
            $ttl = $redis->ttl($redis_key);
            if ($ttl == -1) {
                $redis->del($redis_key);
            }
        }
    }
}