我們都知道查找 redis 的鍵時(shí),可以使用 keys pattern,但當(dāng) key 太多時(shí),keys 命令的效率就很低,如果在線上直接使用,甚至可能發(fā)生生產(chǎn)事故,這時(shí)候,我們不妨使用 scan 命令。
為汕尾等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及汕尾網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、汕尾網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
SCAN 命令是一個(gè)基于游標(biāo)的迭代器(cursor based iterator):
SCAN 命令每次被調(diào)用之后, 都會(huì)向用戶返回一個(gè)新的游標(biāo), 用戶在下次迭代時(shí)需要使用這個(gè)新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù), 以此來(lái)延續(xù)之前的迭代過(guò)程。
當(dāng) SCAN 命令的游標(biāo)參數(shù)被設(shè)置為 0 時(shí), 服務(wù)器將開(kāi)始一次新的迭代, 而當(dāng)服務(wù)器向用戶返回值為 0 的游標(biāo)時(shí), 表示迭代已結(jié)束。
生成 key
<?php
// 生成1000個(gè)
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379, 10);
$redis->select(2);
$arr = [
'rwer',
'24erw',
'rterq4',
'sdgfd5',
'dgsdg',
'sfst',
];
for ($i=0; $i<1000; $i++) {
$redis->set(md5($i.$arr[$i%6]), md5($arr[$i%6].'sdfsd'));
}
echo "OK".PHP_EOL;keys 查看個(gè)數(shù)
keys c*

Redis中使用scan替換keys
scan 遍歷
<?php
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379, 10);
$redis->select(2);
$iterator = null;
// 遍歷前綴
$pattern = 'c*';
$count = 100;
// 務(wù)必設(shè)置,如果沒(méi)掃描到,繼續(xù)掃描,而不是返回空,否則while直接退出,遍歷就會(huì)不準(zhǔn)確
$redis->setOption(\Redis::OPT_SCAN, \Redis::SCAN_RETRY);
$total = [];
$i = 0;
// $count可以不設(shè)置,非必需參數(shù)
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;Redis中使用scan替換keys

當(dāng)然你也可以不使用 \Redis::OPT_SCAN, \Redis::SCAN_RETRY 這兩個(gè)參數(shù),自行循環(huán),判斷返回值是不是 false,也能遍歷成功。
以上就是Redis 中如何使用 scan 替換 keys的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!
文章名稱:Redis中用scan替換keys的方法
網(wǎng)址分享:http://www.chinadenli.net/article26/pesjcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、建站公司、標(biāo)簽優(yōu)化、網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)