redis 中匹配某些key的方法一般有keys和scan兩種方式,但是鑒于直接在線上執行keys操作可能會造成Redis卡死等問題,所以想看有哪些keys,只能使用scan來操作了。在Redis命令行下操作沒啥問題:
SCAN 游標 MATCH 模式 COUNT
每次執行都會返回當前遍歷到了哪個槽位和是否找到了對應的key
項目中使用了Phpredis擴展,所以想著用程序來遍歷一下看看,一開始按照phpredis官網文檔提供的代碼示例執行
:這是官方文檔,我在PHP7下執行了一下,發現并沒有結果。。。。。。。
scan
Description: Scan the keyspace for keys
Parameters
LONG (reference): Iterator, initialized to NULL STRING, Optional: Pattern to match LONG, Optional: Count of keys per iteration (only a suggestion to Redis)
Return value
Array, boolean: This function will return an array of keys or FALSE if Redis returned zero keys
Example
/ Without enabling Redis::SCAN_RETRY (default condition)/
$it = NULL;
do {
// Scan for some keys
$arr_keys = $redis->scan($it);
// Redis may return empty results, so protect against that
if ($arr_keys !== FALSE) {
foreach($arr_keys as $str_key) {
echo "Here is a key: $str_key\n";
}
}
} while ($it > 0);
echo "No more keys to scan!\n";
/ With Redis::SCAN_RETRY enabled/
$redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY);
$it = NULL;
/ phpredis will retry the SCAN command if empty results are returned from the
server, so no empty results check is required./
while ($arr_keys = $redis->scan($it)) {
foreach ($arr_keys as $str_key) {
echo "Here is a key: $str_key\n";
}
}
echo "No more keys to scan!\n";
然后從網上搜了一下,發現有 $redis->scan($it,$match,$count)的,這樣好像能搜到一些key,但還是不行。
我的理想情況是跟命令行一樣,每次scan能夠返回一個游標的位置和這次掃描出的keys。。。。。。。。。
最后是同事寫了一個版本,這個版本可以
$it = null;
$match = 'zhongce:activity_vote*';
$count = 10000;
$index = 0;
$redis->setOption(Redis::OPT_SCAN,Redis::SCAN_RETRY);
$iterator = null;
while ($keys = call_user_func_array(array($redis, 'scan'), array(&$it, $match))) {
foreach ($keys as $key) {
echo $key . PHP_EOL;
}
}
上面是沒加count的版本,會直接遍歷出所有滿足條件的keys,你也可以加上count限制每次遍歷的數量。。。。。。。。。。
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網頁名稱:PHP7+REDIS3.2phpredisscan命令游標問題-創新互聯
路徑分享:http://vcdvsql.cn/article34/pjpse.html
成都網站建設公司_創新互聯,為您提供網站設計、關鍵詞優化、網站設計公司、App設計、面包屑導航、品牌網站設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯