成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

redis實(shí)現(xiàn)像關(guān)系型數(shù)據(jù)庫一樣按條件高效查詢分頁

YancyYe / 2016人閱讀

摘要:業(yè)務(wù)場(chǎng)景以高效讀取數(shù)據(jù)著稱,我們常常把等關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)在中,按照這種查詢是高效的,但是我們的需求是按多個(gè)條件組合來查詢,如查詢以下是代碼片段數(shù)據(jù)轉(zhuǎn)數(shù)據(jù),并構(gòu)建索引以上代碼用到了數(shù)據(jù)結(jié)構(gòu)有集合有序集合,用到了集合的合并

業(yè)務(wù)場(chǎng)景:redis以高效讀取數(shù)據(jù)著稱,我們常常把mysql、oracle等關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)在redis中,按照key=>value 這種查詢是高效的,但是我們的需求是按多個(gè)條件組合來查詢,如查詢 select *from table where money>1000 and id not in(1,2,3,4) order by id,money asc limit 10 以下是代碼片段

1、mysql數(shù)據(jù)轉(zhuǎn)redis數(shù)據(jù),并構(gòu)建索引

           foreach($f_list as $key=>$f)
            {
                RDBX::instance("redis")->set("data:fins:".$f["id"],json_encode($f));


                $tmp_idx_fins_id_arr[] = $f["id"];

                RDBX::instance("redis")->sAdd("idx:fins:source_type:".$f["source_type"],$f["id"]);
                RDBX::instance("redis")->sAdd("idx:fins:bill_day:".$f["bill_day"],$f["id"]);
                $tmp_idx_fins_money[] = $f["money"];
                $tmp_idx_fins_money[] = $f["id"];


                $tmp_source_type_arr[] = $f["source_type"];
                $tmp_bill_day_arr[] = $f["bill_day"];
                $tmp_money_arr[] = $f["money"];



                RDBX::instance("redis")->set("score:fins:invest_time:".$f["id"],$f["invest_time"]);
                RDBX::instance("redis")->set("score:fins:money:".$f["id"],$f["money"]);

                RDBX::instance("redis")->sAdd("idx:fins:client_id:".$f["client_id"],$f["id"]);


                $tmp_client_id_arr[] = $f["client_id"];

                RDBX::instance("redis")->set("score:fins:id:invest_time:".$f["id"],$f["id"].$f["invest_time"]);
                RDBX::instance("redis")->set("score:fins:id:money:".$f["id"],$f["id"].$f["money"]);



            }
            call_user_func_array(array(RDBX::instance("redis"), "zAdd"), $tmp_idx_fins_money);
            call_user_func_array(array(RDBX::instance("redis"), "sAdd"), $tmp_idx_fins_id_arr);
            call_user_func_array(array(RDBX::instance("redis"), "sAdd"), $tmp_source_type_arr);
            call_user_func_array(array(RDBX::instance("redis"), "sAdd"), $tmp_bill_day_arr);
            call_user_func_array(array(RDBX::instance("redis"), "sAdd"), $tmp_money_arr);
            call_user_func_array(array(RDBX::instance("redis"), "sAdd"), $tmp_client_id_arr);

以上代碼用到了redis數(shù)據(jù)結(jié)構(gòu)有 集合、有序集合,用到了集合的合并操作

2、實(shí)現(xiàn)按各種組合條件查詢

    RDBX::instance("redis")->sDiffStore("sdiff_ids","idx:fins","not_fids","idx:fins:client_id:".$this->linfo["fincncin_client_id"]);
    $idx_fins_source_type_set = "idx:fins:source_type:".$this->linfo["source_type"];
    $idx_fins_bill_day_set = "idx:fins:bill_day:".$this->linfo["repay_day"];
    RDBX::instance("redis")->SinterStore("sinter_multi",$idx_fins_source_type_set,$idx_fins_bill_day_set,$money_set,"sdiff_ids");
    $sort=array("BY"=>$by_double,
        "SORT"=>"ASC",
        "GET"=>"data:fins:*",
        "LIMIT"=>array(0,$num)
    );
    $list =  RDBX::instance("redis")->sort("sinter_multi",$sort);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30717.html

相關(guān)文章

  • 我用云緩存Redis實(shí)現(xiàn)了一個(gè)輕量級(jí)的搜索引擎!

    摘要:這里會(huì)發(fā)現(xiàn),漏了一個(gè)價(jià)格的條件??偨Y(jié)這里只是一個(gè)采用優(yōu)化查詢搜索的一個(gè)簡(jiǎn)單,和現(xiàn)有的開源搜索引擎相比,它更輕量,學(xué)習(xí)成本頁相應(yīng)低些。大家如果是做后端開發(fā)的,想必都實(shí)現(xiàn)過列表查詢的接口,當(dāng)然有的查詢條件很簡(jiǎn)單,一條 SQL 就搞定了。但有的查詢條件極其復(fù)雜,再加上庫表中設(shè)計(jì)的各種不合理,導(dǎo)致查詢接口特別難寫,然后加班什么的就不用說了(不知各位有沒有這種感受呢~)。下面以一個(gè)例子開始,這是某購物...

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<