在開發中經常遇到主頁面大量資料載入,同時又不會經常改變的資料,每次從資料庫裡取資料對資料庫的負荷非常大,然而將其放入到快取內可以有效減輕資料庫壓力,提公升頁面載入速度。
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))
}$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
利用redis實現分頁和型別切換
場景 資料表結構如下 create table cityarea id int 11 notnull auto increment name varchar 50 not null phone varchar 30 not null city id int 11 notnull area id in...
redis實現分頁
使用有序集合zadd 使用hash儲存具體的資料 取資料通過有序集合的zrevrange 倒敘 zrange 正序 比如,現在我們要對新聞表news做查詢分頁,我們按照新聞新增時間add time正序或者倒敘排列 新增資料 redis redis例項 不多說 add time 文章新增時間 id 文...
php利用redis實現訊息佇列解析
php redis訊息佇列是php mysql效能不足時的乙個中間間處理方案。通過這個中間的處理,保證的資料的可用性和準確性。用於伺服器瞬間請求大,資料庫壓力大的情況。如併發量大導致的超賣 併發量大導致的資料重複情況。流程 php接受請求和資料 php把資料寫入redis佇列中 入隊 shell定時...