php利用redis實現分頁列表,新增,刪除功能


在開發中經常遇到主頁面大量數據加載,同時又不會經常改變的數據,每次從數據庫里取數據對數據庫的負荷非常大,然而將其放入到緩存內可以有效減輕數據庫壓力,提升頁面加載速度。

1.基本連接方式實現:

use Redis; 引入redis類
$this->redis = Redis::connection('email'); //連接
$basicKeys = 'emailList:'.$own['user_id']; //key可以根據自己需求進行更改


2.添加數據至redis緩存
$this->redis->hMset($basicKeys.':'.$temp['email_id'],['list'=>serialize($temp)]);  //將數據以hash類型寫入到redis

$this->redis->zAdd($basicKeys.'_sort',$temp['email_id'],$temp['email_id']);     //設置識別符,使用有序隊列將對於緩存的數據id存在到當前key下,以方便數據查找

3.獲取分頁數據

$pageSize = $data['limit'] ? intval($data['limit']) : 5; //頁大小
$page = $data['page'] ? intval($data['page']) :1;     //當前頁碼
$limit_s = ($page-1) * $pageSize;
$limit_e = ($limit_s + $pageSize) - 1;
$count = $this->redis->zCard($basicKeys.'_sort'); //統計ScoreSet總數
$pageCount = ceil($count/$pageSize); //總共多少頁
$ids = $this->redis->ZRANGE($basicKeys.'_sort',$limit_s,$limit_e); //獲取分頁id,對應獲取hash內的分頁數據
rsort($ids);
if($ids && is_array($ids)){
foreach ($ids as $v){
$dataFinal[] = $this->redis->hgetall($basicKeys.':'.$v) ? unserialize($this->redis->hgetall($basicKeys.':'.$v)['list']) : '';
}
}

$res = [
  'data' = $dataFinal,
  'pageinfo' = $count,      //總條數
  'page_count'=> $count, //總頁數
  'page_size' => $pageSize,  //每頁顯示數量
  'page_num'  => $page,   //當前頁
]
return $res;

3.刪除或者修改數據:為了保持數據庫數據與緩存數據同步性,需要在對數據庫操作后同時修改對應redis內數據,原理其實就是對hash與集合類型的數據修改與刪除
  刪除時:

$this->redis->del($basicKeys.'$email_id');      //刪除緩存數據
$this->_redis->zRem($basicKeys.'_sort',$email_id); //刪除查詢索引id

 

 




免責聲明!

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



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