- SCAN
SCAN cursor [MATCH pattern] [COUNT count]- 作用:迭代當(dāng)前數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)鍵
- SCAN 使用 demo
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); /* Options for the SCAN family of commands, indicating whether to abstract empty results from the user. If set to SCAN_NORETRY (the default), phpredis will just issue one SCAN command at a time, sometimes returning an empty array of results. If set to SCAN_RETRY, phpredis will retry the scan command until keys come back OR Redis returns an iterator of zero */ $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $iterator = null; $count = 1000; // 測(cè)試時(shí)redis中大概有20w個(gè)key,用時(shí)約2s,當(dāng)count為500時(shí)用時(shí)約4s,count越大時(shí)掃描用時(shí)越短(當(dāng)然需要根據(jù)你的業(yè)務(wù)需要來(lái)定) $prefix = date('Ymd'); $time1 = msectime(); $total = []; while ($arrKeys = $redis->scan($iterator, $prefix . '*', $count)) { $arrValues = $redis->mget($arrKeys); $ret = array_combine($arrKeys, $arrValues); $total = array_merge($total, $ret); } $time2 = msectime(); $time = $time2 - $time1; echo 'time : ' . $time . ' ms; total keys : ' . count($total) . PHP_EOL; // time : 2009 ms; total keys : 129798 (用時(shí)2009 ms,20w中共有129798個(gè)前綴為$prefix的key) function msectime() { list($msec, $sec) = explode(' ', microtime()); $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); return $msectime; } - SSCAN
SCAN cursor [MATCH pattern] [COUNT count]- 作用:用于迭代集合鍵中的元素
- SSCAN使用demo
<?php $iterator = null; $count = 1000; $mainKey = date('Ymd'); $prefix = $mainKey; $total = []; $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $time1 = msectime(); while ($arrKeys = $redis->sscan($mainKey, $iterator, $prefix . '*', $count)) { // 匹配前綴為當(dāng)前日期的key $total += $arrKeys; } $time2 = msectime(); $time = $time2 - $time1; echo 'use time : ' . $time . ' ms; total keys : ' . count($total) . PHP_EOL; // use time : 649 ms; total keys : 90010 (這個(gè)集合中有20w個(gè)元素) ....... other code ...... - ZSCAN
ZSCAN cursor [MATCH pattern] [COUNT count]- 作用:用于迭代有序集合中的元素
- ZSCAN使用demo
<?php $iterator = null; $count = 1000; $mainKey = 'test'; $prefix = '10'; $total = []; $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $time1 = msectime(); while ($arrKeys = $redis->zscan($mainKey, $iterator, $prefix . '*', $count)) { // 匹配key前綴是 10 的所有key var_dump($arrKeys); $total += $arrKeys; } $time2 = msectime(); $time = $time2 - $time1; echo 'use time : ' . $time . ' ms; total keys : ' . count($total) . PHP_EOL; // use time : 317 ms; total keys : 1111 (這個(gè)集合中有10w個(gè)元素) ...... other code ...... - HSCAN
HSCAN cursor [MATCH pattern] [COUNT count]- 作用:用于迭代哈希中的元素
- HSACN 使用demo
<?php $iterator = null; $count = 1000; $mainKey = 'my_hash_key'; $match = "*key*"; $total = []; $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->setOption(Redis::OPT_SCAN, Redis::SCAN_RETRY); $time1 = msectime(); while ($arrKeys = $redis->hscan($mainKey, $iterator, $match, $count)) { // 匹配含有'key'的鍵 var_dump($arrKeys); $total += $arrKeys; } $time2 = msectime(); $time = $time2 - $time1; echo 'use time : ' . $time . ' ms; total keys : ' . count($total) . PHP_EOL; // use time : 1484 ms; total keys : 100000 ...... other code ...... - redis pipe 代碼demo (快速向有序集合添加100000個(gè)key, 其他操作類似, 只要修改for中的操作即可)
$pipe = $redis->multi(Redis::PIPELINE); for ($i = 0; $i < 100000; $i++) { $redis->zAdd($key, $i, $i); } $curValues = $pipe->exec(); $val = $redis->zRange($key, 0, -1, true); var_dump($val); - 傳送門
PHP redis SCAN、SSCAN、ZSCAN、HSCAN 的使用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- =========================================================...
- NOSQL類型簡(jiǎn)介鍵值對(duì):會(huì)使用到一個(gè)哈希表,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù),如redis,volde...
- =========================================================...
- 轉(zhuǎn)自:http://bbs.redis.cn/forum.php?mod=viewthread&tid=481 p...