国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

用PHP遍歷SSDB中的zset集合

2020-03-22 19:10:09
字體:
來源:轉載
供稿:網友
  • 連接 SSDB
    <?phprequire_once("SSDB.php");$ssdb = new SimpleSSDB('127.0.0.1', 8888);

    生成測試數據

    $zname = 'test';for($i=0; $i<1000; $i++){    $key = "k$i";    $score = mt_rand(0, 100);    $ssdb->zset($zname, $key, $score);}$size = $ssdb->zsize($zname);echo "total $size items/n";


    這段代碼生成了一個名為 zname 的 zset 集合, 里面有 1000 個元素, 某些元素的權重(score)是相同的.

    遍歷

    $num = 1;$key_start = '';$score_start = '';while(1){    $items = $ssdb->zscan($zname, $key_start, $score_start, '', 10);    if(!$items){        break;    }    foreach($items as $key=>$score){        printf("%5d: %-5s = %5d/n", $num, $key, $score);        // 記住最大的元素和它的權重        $key_start = $key;        $score_start = $score;        $num += 1;    }    echo "---/n";}


    雖然已經知道集合中有 1000 個元素, 但大多數情況 zset 集合中可能存儲幾百萬個或者更多的元素(SSDB的集合大小只受限于硬盤空間), 所以不能一次把獲取所有的元素, 必須分批遍歷.

    作為示例, 這里一次只遍歷 10 個元素, 然后再遍歷后 10 個, 走到所有的元素都遍歷完畢.

    zscan 函數為什么需要 key_start 參數?

    zset 的遍歷是基于 score 的, 也就是按 score 值從小到大遍歷. 那么, zscan() 函數應該只需要 score_start 和 score_end 參數就可以了, 為什么還需要 key_start 呢?

    其實, 這個問題很好解答. 設想有 11 個元素都有共同的 score=1, 第一次遍歷時返回了 10 個, 還剩 1 個. 那么, 下一次再遍歷時, 如果 score_start 還是 1, 那么剩下的那個元素將被跳過, 因為 zscan 只返回權重大于 score_start 的元素.

    所以, 必須加上 key_start 參數, 讓 zscan 返回權重大于 score_start 且大于 key_start 的元素.

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 嘉义县| 全椒县| 五原县| 长岭县| 奉新县| 鲁甸县| 奉节县| 南澳县| 沅陵县| 东方市| 池州市| 天祝| 庆城县| 澜沧| 南充市| 资中县| 安仁县| 麦盖提县| 花垣县| 赣州市| 岢岚县| 永福县| 固安县| 商城县| 安图县| 琼中| 天全县| 晋中市| 永安市| 英吉沙县| 来安县| 永丰县| 林周县| 金寨县| 陇南市| 卢湾区| 姚安县| 广平县| 佛冈县| 陆河县| 阿合奇县|