使用redis完成搜索/分頁/排序


 
         
功能:根據用戶展示pn的相關信息,能搜索具體的pn, 可以分頁 思路:redis常用結構第一就想到了hash,可以搜索和存儲信息;Sorted Set 可以搜索和截取
將Pn存儲在兩種結構中,先從set分頁后,在去hash獲取具體內容


數據格式:
'用戶ID1' => [ 'pnNumber1' => [ 'pnName' => 'E', 'pnCategory' => 'A', 'pnDesc' => 'C' ], 'pnNumber2' => [ 'pnName' => 'E', 'pnCategory' => 'A', 'pnDesc' => 'C' ] //... ],//... redis數據格式: //sorted set 'setName' => [ 'pnNumber1', 'pnNumber2' ], //hash 將pn號作為hash的field, 相關信息編碼成json格式作為field的value 'hashName' => [ 'pnNumber1' => '{pnName: "E", pnCategory: "A", pnDesc: "C"}' ] 代碼實現: //add to sorted set (sorted set 可以用來排序,有個分數的概念,所以這里用time()) Yii::$app->redis->zadd($this->setName, time(), $pn); //add to hash $data = [ 'pn' => $pn, 'desc' => $desc, 'category' => $category ]; Yii::$app->redis->hset($this->hashName, $pn, json_encode($data)); //分頁的實現,結合redis的兩種數據格式 public function getPartByLimit($start, $end) { $result = []; //先從set中取出pn(從大到小排列) $pns = Yii::$app->redis->zrevrange($this->setName, $start, $end); //循環pn從hash中取出相應信息 foreach ($pns as $pn) { $result[] = json_decode(Yii::$app->redis->hget($this->hashName, $pn), true); } return $result; } //搜索的實現 if (Yii::$app->redis->hexists($this->hashName, $pn)) { return json_decode(Yii::$app->redis->hget($this->hashName, $pn), true); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM