定義
Redis Scan 命令用于迭代數(shù)據(jù)庫中的數(shù)據(jù)庫鍵。
SCAN 命令是一個基于游標的迭代器衡怀,每次被調(diào)用之后装畅, 都會向用戶返回一個新的游標恭应, 用戶在下次迭代時需要使用這個新游標作為 SCAN 命令的游標參數(shù), 以此來延續(xù)之前的迭代過程阴孟。
SCAN 返回一個包含兩個元素的數(shù)組晌纫, 第一個元素是用于進行下一次迭代的新游標, 而第二個元素則是一個數(shù)組永丝, 這個數(shù)組中包含了所有被迭代的元素锹漱。如果新游標返回 0 表示迭代已結(jié)束。
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中獲取所有符合匹配規(guī)則的key信息
* @param $match 匹配規(guī)則
* @return array
*/
function dealKeysByRedis($match){
//游標
$cursor = 0;
//所有符合匹配規(guī)則的key
$keyList = [];
do{
$keys = \Illuminate\Support\Facades\Redis::Scan($cursor,'MATCH',$match,'COUNT',200);
if(!isset($keys)) return [];
//存儲篩選出來的數(shù)據(jù)
$keyList[]= $keys[1];
}while ($cursor != 0);
return array_flatten($keyList);
}
# 調(diào)用
$matchKeys = dealKeysByRedis('userToken:*')
# 打印結(jié)果
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"
]