Home > Database > Redis > body text

How to use scan to replace keys in Redis

藏色散人
Release: 2020-01-28 14:06:32
forward
3758 people have browsed it

How to use scan to replace keys in Redis

We all know that when searching for Redis keys, you can use keys pattern. However, when there are too many keys, the efficiency of the keys command is very low. If used directly online, it may even cause production problems. Accident, at this time, we might as well use the scan command.

The SCAN command is a cursor-based iterator (cursor based iterator):

Every time the SCAN command is called, a new cursor will be returned to the user. The user needs to use this new cursor as the cursor parameter of the SCAN command in the next iteration to continue the previous iteration process.

When the cursor parameter of the SCAN command is set to 0, the server will start a new iteration, and when the server returns a cursor with a value of 0 to the user, it indicates that the iteration has ended.

Generate key

<?php
// 生成1000个
$redis = new \Redis();
$redis->connect(&#39;127.0.0.1&#39;, 6379, 10);
$redis->select(2);
$arr = [
    &#39;rwer&#39;,
    &#39;24erw&#39;,
    &#39;rterq4&#39;,
    &#39;sdgfd5&#39;,
    &#39;dgsdg&#39;,
    &#39;sfst&#39;,
];
for ($i=0; $i<1000; $i++) {
    $redis->set(md5($i.$arr[$i%6]), md5($arr[$i%6].&#39;sdfsd&#39;));
}
echo "OK".PHP_EOL;
Copy after login

keys View number

keys c*

How to use scan to replace keys in Redis

Use scan in Redis to replace keys

scan traverse

<?php
$redis = new \Redis();
$redis->connect(&#39;127.0.0.1&#39;, 6379, 10);
$redis->select(2);
$iterator = null;
// 遍历前缀
$pattern = &#39;c*&#39;;
$count = 100;
// 务必设置,如果没扫描到,继续扫描,而不是返回空,否则while直接退出,遍历就会不准确
$redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);
$total = [];
$i = 0;
// $count可以不设置,非必需参数
while($arr = $redis->scan($iterator, $pattern, $count)) {
    $arrVal = $redis->mget($arr);
    $ret = array_combine($arr, $arrVal);
    $total = array_merge($total, $ret);
    $i++;
}
// var_dump($total);
var_dump($i);
echo count($total).PHP_EOL;
Copy after login

Use in Redis scan replace keys

How to use scan to replace keys in Redis

Of course you can also not use \Redis::OPT_SCAN, \Redis::SCAN_RETRY These two parameters loop by themselves to determine whether the return value is false, and the traversal can also be successful.

For more redis knowledge, please pay attention to the redis database tutorial column.

The above is the detailed content of How to use scan to replace keys in Redis. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:learnku.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!