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);
}
}
}
}