Redis Scan

定义

Redis Scan 命令用于迭代数据库中的数据库键。
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。
SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。

Redis-cli中的用法

127.0.0.1:6379> scan 0 MATCH bf* COUNT 2
1) "48"
2) 1) "bf_md5_A_lastMonth"
   2) "bf_destIp_A_ninety"

PHP中的用法用法

/**
 * 从Redis中获取所有符合匹配规则的key信息
 * @param $match 匹配规则
 * @return array
 */
function dealKeysByRedis($match){
    //游标
    $cursor = 0;
    //所有符合匹配规则的key
    $keyList = [];
    do{
        $keys =  \Illuminate\Support\Facades\Redis::Scan($cursor,'MATCH',$match,'COUNT',200);
        if(!isset($keys))  return [];
        //存储筛选出来的数据
        $keyList[]= $keys[1];
    }while ($cursor != 0);
    return array_flatten($keyList);
}

# 调用
$matchKeys = dealKeysByRedis('userToken:*')
# 打印结果
array:6 [
  0 => "userToken:A_1_eCd0v3B31MvB8MhsTGbZTqw6ni5HUebrWEbzUXcF"
  1 => "userToken:A_1_1jdKqgmeAunZ8FpF1cHQ5Vun0konfWEwTlRb3wSV"
  2 => "userToken:A_1_NgVWjaHpJSeUwawNP4kiCxhnrOQHDMTW9y1Gk3sZ"
  3 => "userToken:A_1_lGcTYbJx3ByUlllK8ikALoI2CE3mtgMVA3mOXNet"
  4 => "userToken:A_1_jUmwEMiPR0fvRmw3LaROVOFRf5RnABrX9TS2dtBY"
  5 => "userToken:A_1_Wlu1inDwwTQiA9weZSyCi8ifwnQoF2bmHXYfciQR"
]

推荐阅读更多精彩内容