Redis 使用 scan 命令代替 keys

由于 keys 命令会影响 redis 性能,所以将 keys 命令改为 scan

原本的代码:

$redis = QRedis::getInstance('common');//获取redis连接实例 或者为 $redis = new Redis();
$array = $redis->keys('test:*');
//code

修改后变为

$redis = QRedis::getInstance('common');//获取redis连接实例 或者为 $redis = new Redis(); $redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);

$it = null;
$match = 'test:*';
$count = 10000;

while ($array = $redis->scan($it, $match, $count) {
  //code
}

结果报错:

Warning:  Parameter 1 to Redis::scan() expected to be a reference, value given in

经过万能的谷歌指导,代码改为

$redis = QRedis::getInstance('common');

$redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);

$it = null;
$match = 'g:static:clear:todo:*';
$count = 10000;

while ($array = call_user_func_array(array($redis, 'scan'), array(&$it, $match, $count))) {
  //code 
}

于是完美的解决问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容