中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis中用scan替換keys的方法

發布時間:2020-05-21 15:28:50 來源:億速云 閱讀:463 作者:鴿子 欄目:關系型數據庫

我們都知道查找 Redis 的鍵時,可以使用 keys pattern,但當 key 太多時,keys 命令的效率就很低,如果在線上直接使用,甚至可能發生生產事故,這時候,我們不妨使用 scan 命令。

SCAN 命令是一個基于游標的迭代器(cursor based iterator):

SCAN 命令每次被調用之后, 都會向用戶返回一個新的游標, 用戶在下次迭代時需要使用這個新游標作為 SCAN 命令的游標參數, 以此來延續之前的迭代過程。

當 SCAN 命令的游標參數被設置為 0 時, 服務器將開始一次新的迭代, 而當服務器向用戶返回值為 0 的游標時, 表示迭代已結束。

生成 key

<?php
// 生成1000個
$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 查看個數

keys c*

Redis中用scan替換keys的方法

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;
// 務必設置,如果沒掃描到,繼續掃描,而不是返回空,否則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;

Redis中使用scan替換keys

Redis中用scan替換keys的方法

當然你也可以不使用 \Redis::OPT_SCAN, \Redis::SCAN_RETRY 這兩個參數,自行循環,判斷返回值是不是 false,也能遍歷成功。

以上就是Redis 中如何使用 scan 替換 keys的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊通| 昌黎县| 苍梧县| 军事| 突泉县| 正蓝旗| 灵丘县| 黄龙县| 长武县| 磐安县| 盘山县| 镇沅| 九寨沟县| 双辽市| 白玉县| 虹口区| 炉霍县| 汉阴县| 黑水县| 杂多县| 越西县| 清远市| 张家川| 保亭| 浮山县| 闽侯县| 饶河县| 北票市| 醴陵市| 阳谷县| 介休市| 西乡县| 天台县| 阿克陶县| 剑河县| 惠东县| 普洱| 缙云县| 八宿县| 金山区| 理塘县|