PHP7+REDIS3.2 phpredis scan命令 游标问题
admin
2023-02-11 22:40:05
0

redis 中匹配某些key的方法一般有keys和scan两种方式,但是鉴于直接在线上执行keys操作可能会造成Redis卡死等问题,所以想看有哪些keys,只能使用scan来操作了。在Redis命令行下操作没啥问题:
SCAN 游标 MATCH 模式 COUNT
每次执行都会返回当前遍历到了哪个槽位和是否找到了对应的key
项目中使用了Phpredis扩展,所以想着用程序来遍历一下看看,一开始按照phpredis官网文档提供的代码示例执行
:这是官方文档,我在PHP7下执行了一下,发现并没有结果。。。。。。。
scan
Description: Scan the keyspace for keys

Parameters
LONG (reference): Iterator, initialized to NULL STRING, Optional: Pattern to match LONG, Optional: Count of keys per iteration (only a suggestion to Redis)

Return value
Array, boolean: This function will return an array of keys or FALSE if Redis returned zero keys

Example

/ Without enabling Redis::SCAN_RETRY (default condition) /
$it = NULL;
do {
// Scan for some keys
$arr_keys = $redis->scan($it);

// Redis may return empty results, so protect against that
if ($arr_keys !== FALSE) {
    foreach($arr_keys as $str_key) {
        echo "Here is a key: $str_key\n";
    }
}

} while ($it > 0);
echo "No more keys to scan!\n";

/ With Redis::SCAN_RETRY enabled /
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
$it = NULL;

/ phpredis will retry the SCAN command if empty results are returned from the
server, so no empty results check is required.
/
while ($arr_keys = $redis->scan($it)) {
foreach ($arr_keys as $str_key) {
echo "Here is a key: $str_key\n";
}
}
echo "No more keys to scan!\n";

然后从网上搜了一下,发现有 $redis->scan($it,$match,$count)的,这样好像能搜到一些key,但还是不行。
我的理想情况是跟命令行一样,每次scan能够返回一个游标的位置和这次扫描出的keys。。。。。。。。。

最后是同事写了一个版本,这个版本可以

$it = null;
$match = 'zhongce:activity_vote*';
$count = 10000;
$index = 0;
$redis->setOption(Redis::OPT_SCAN,Redis::SCAN_RETRY);
$iterator = null;
while ($keys = call_user_func_array(array($redis, 'scan'), array(&$it, $match))) {

foreach ($keys as $key) {
    echo $key . PHP_EOL;
}

}

上面是没加count的版本,会直接遍历出所有满足条件的keys,你也可以加上count限制每次遍历的数量。。。。。。。。。。

相关内容

热门资讯

理想境界取得李萨如扫描器专利,... 国家知识产权局信息显示,成都理想境界科技有限公司取得一项名为“一种李萨如扫描器”的专利,授权公告号C...
今日重大消息“全民牛牛怎么装挂... 有 亲,根据资深记者爆料全民牛牛是可以开挂的,确实有挂(咨询软件无需打开...
重磅消息“全民竞技辅助器?”(... 网上科普关于“全民竞技有没有挂”话题很是火热,小编也是针对全民竞技作*弊开挂的方法以及开挂对应的知识...
【第一消息】“拱趴大菠萝可以开... 有 亲,根据资深记者爆料拱趴大菠萝是可以开挂的,确实有挂(咨询软件无需打...
今日重磅消息“好玩茶楼是不是有... 网上科普关于“好玩茶楼有没有挂”话题很是火热,小编也是针对好玩茶楼作*弊开挂的方法以及开挂对应的知识...
今日重大发现“新人海炸/金/花... 有 亲,根据资深记者爆料新人海炸/金/花是可以开挂的,确实有挂(咨询软件...
【第一财经】“TT语音怎么装挂... 您好:TT语音这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
重磅消息“腾讯掼蛋到底是不是挂... 家人们!今天小编来为大家解答腾讯掼蛋透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...
我来教教您“欢乐贰柒拾有挂吗?... 家人们!今天小编来为大家解答欢乐贰柒拾透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买...
终于明白“新好游炸/金/花真的... 您好:新好游炸/金/花这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在...