利用redis做緩存服務器來緩解數據庫查詢壓力是非常有效也是非常有必要的, 當用戶第一次點擊頁面的時候查詢數據庫, 然后將查詢結果緩存在redis服務器中,緩存時間隨你的數據改變時間而定,這樣可大大降低數據庫壓力;下面是具體函數方法;
查詢數據庫操作這里就不多說了, 這里主要說關於redis緩存方面的技術操作;
public function getSqlVal(){ //獲取參數列表,這個參數隨你需求而定,一般可能需要傳入dbname,查詢方式如fetchAll,查詢語句等 $argv = func_get_args(); //假設這里現在只傳入dbName和sql語句 $dbName = $argv[0]; $sql = $argv[1]; //現在把這個參數列表轉成md5之后作為存redis的key值 $md5SqlKey = MD5(serialize($argv)); //下面通過一個redis函數來進行存取數據 $res = getRedisData($md5SqlKey); //如果取到數據,說明已經緩存在redis服務器中, 直接取數據就好, 如果沒有數據, 則再去數據庫查詢數據,再講查詢的數據存在redis服務器中 if(!empty($res)) { return $res; } //后面是查詢數據庫操作,查詢結果返回在$res中 getRedisData($md5SqlKey,$res); //講返回結果存在redis中 return $res; }
getRedisData這個函數的封裝:
//這里$key就是傳入的md5處理過的鍵,$value是要存的數據, 如果為空代表取數據,不為空折是存數據,time是緩存時間,不設置默認系統設置時間 function getRedisData($key,$value=null,$time=null){ //首先這里需要實例化redis對象,redis的封裝我這里就不寫了,到這里肯定會有自己的封裝 $redis = new Redis(); if($value == null){ return $redis->get($key) ; }else{ if($time==null){ $timeOut = 2*60;//過期時間默認,可自行設置 }else{ $timeOut = $time; } $redis->set($key,serialize($value),$timeOut) //這里用serialize函數是序列化這個結果集,取的時候直接unserialize即可; } }
