功能:根據用戶展示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);
}