摘要:業務場景以高效讀取數據著稱,我們常常把等關系型數據庫的數據存儲在中,按照這種查詢是高效的,但是我們的需求是按多個條件組合來查詢,如查詢以下是代碼片段數據轉數據,并構建索引以上代碼用到了數據結構有集合有序集合,用到了集合的合并
業務場景:redis以高效讀取數據著稱,我們常常把mysql、oracle等關系型數據庫的數據存儲在redis中,按照key=>value 這種查詢是高效的,但是我們的需求是按多個條件組合來查詢,如查詢 select *from table where money>1000 and id not in(1,2,3,4) order by id,money asc limit 10 以下是代碼片段
1、mysql數據轉redis數據,并構建索引
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數據結構有 集合、有序集合,用到了集合的合并操作
2、實現按各種組合條件查詢
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);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30717.html
摘要:這里會發現,漏了一個價格的條件。總結這里只是一個采用優化查詢搜索的一個簡單,和現有的開源搜索引擎相比,它更輕量,學習成本頁相應低些。大家如果是做后端開發的,想必都實現過列表查詢的接口,當然有的查詢條件很簡單,一條 SQL 就搞定了。但有的查詢條件極其復雜,再加上庫表中設計的各種不合理,導致查詢接口特別難寫,然后加班什么的就不用說了(不知各位有沒有這種感受呢~)。下面以一個例子開始,這是某購物...
閱讀 1129·2021-11-08 13:13
閱讀 1712·2019-08-30 15:55
閱讀 2767·2019-08-29 11:26
閱讀 2434·2019-08-26 13:56
閱讀 2556·2019-08-26 12:15
閱讀 2133·2019-08-26 11:41
閱讀 1400·2019-08-26 11:00
閱讀 1535·2019-08-23 18:30