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