redis服務器緩存數據庫查詢出來的數據


  利用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即可;
    }
}    

 


免責聲明!

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



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