我們都知道查找 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
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::OPT_SCAN
, \Redis::SCAN_RETRY
這兩個參數,自行循環,判斷返回值是不是 false,也能遍歷成功。
以上就是Redis 中如何使用 scan 替換 keys的詳細內容,更多請關注創新互聯其它相關文章!
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享文章:Redis中用scan替換keys的方法-創新互聯
文章鏈接:http://vcdvsql.cn/article36/pposg.html
成都網站建設公司_創新互聯,為您提供商城網站、虛擬主機、網站設計、網站建設、網站營銷、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯