定义
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"
]