<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ## TP5實戰開發前篇---緩存(Cache) PHP緩存技術的應用時相當普遍的,也許有些人還對這項技術不太了解,我們現在就為大家詳細的介紹一下PHP緩存技術的相關應用技巧。   在大部份情況下我們的網站都會使用數據庫作為站點數據存儲的容器。當你執行一個SQL查詢時,典型的處理過程是:連接數據庫->準備SQL查詢->發送查詢到數據庫->取得數據庫返回結果->關閉數據庫連接。但數據庫中有些數據是完全靜態的或不太經常變動的,緩存系統會通過把SQL查詢的結果緩存到一個更快的存儲系統中存儲,從而避免頻繁操作數據庫而很大程度上提高了程序執行時間,而且緩存查詢結果也允許你后期處理。 普遍使用的PHP緩存技術 ### php緩存技術之數據緩存:   這里所說的數據緩存是指數據庫查詢緩存,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接數據庫,得到數據,并把查詢結果序列化后保存到文件中,以后同樣的查詢結果就直接從緩存文件中獲得。 ### PHP緩存技術之頁面緩存:   每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接數據庫,得到數據,顯示頁面并同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些緩存類通常有此功能) ### PHP緩存技術之內存緩存:   在里就不介紹了,不是本文所要討論的,只簡單提一下:   Memcached是高性能的,分布式的內存對象緩存系統,用于在動態應用中減少數據庫負載,提升訪問速度。   dbcached 是一款基于 Memcached 和 NMDB 的分布式 key-value 數據庫內存緩存系統。   以上的緩存技術雖然能很好的解決頻繁查詢數據庫的問題,但其缺點在在于數據無時效性,下面我給出我在項目中常用的方法: ### PHP緩存技術之時間觸發緩存:   檢查文件是否存在并且時間戳小于設置的過期時間,如果文件修改的時間戳比當前時間戳減去過期時間戳大,那么就用緩存,否則更新緩存。   設定時間內不去判斷數據是否要更新,過了設定時間再更新緩存。以上只適合對時效性要求不高的情況下使用,否則請看下面。 ### PHP緩存技術之內容觸發緩存:   當插入數據或更新數據時,強制更新緩存。   在這里我們可以看到,當有大量數據頻繁需要更新時,最后都要涉及磁盤讀寫操作。怎么解決呢?我在日常項目中,通常并不緩存所有內容,而是緩存一部分不經常變的內容來解決。但在大負荷的情況下,最好要用共享內存做緩存系統。   到這里PHP緩存也許有點解決方案了,但其缺點是,因為每次請求仍然要經過PHP解析,在大負荷的情況下效率問題還是比效嚴重,在這種情況下,也許會用到靜態緩存。 ### PHP緩存技術之靜態緩存   這里所說的靜態緩存是指HTML緩存,HTML緩存一般是無需判斷數據是否要更新的,因為通常在使用HTML的場合一般是不經常變動內容的頁面。數據更新的時候把HTML也強制更新一下就可以了。 > 以上內容來源于網絡: PHP緩存技術的使用技巧分享 # 緩存應用 源碼實例 >[info] 緩存除了以上對以上減輕服務器壓力提高程序性能效率外,還能實現分布式服務器群一些特殊功效。比如說我們使用Ng的反向代理建立了一個服務器群,那么我們如何做到多服務器能獲取到相同客戶端相同的身份信息呢,很顯然session是不能解決這個問題的 。這時候有一臺共享的緩存服務器就是最便捷的解決方案。 ### 緩存數據庫獲取的信息 ~~~ static public function getTerminalIdByTerminalMac($terminal_mac,$cache=true){ try { $result = Cache::get(__FUNCTION__ . "_{$terminal_mac}"); if ($result && $cache) { return $result; } else { $result = Db::table(OptionsCenter::$tableTerminal)->where([ OptionsCenter::$fieldTerminalMac => $terminal_mac, ])->value(OptionsCenter::$pk); if ($result) { Cache::set(__FUNCTION__ . "_{$terminal_mac}", $result, 600); return $result; } else { return ""; } } } catch (Exception $e) { Log::error($e->getMessage()); return ""; } } ~~~ ### 緩存用作全局變量 驗證手機短信 以下的代碼Cache的已經設置成memcached緩存 本實例方法,用緩存存儲手機短信驗證碼 ,同時實現了避免60秒內重復發送以及驗證功能 ~~~ /** * 檢測手機短信驗證碼 * #User: Mikkle * #Email:776329498@qq.com * #Date: * @param $mobile * @param bool|false $code * @return bool */ protected function checkRegSms($mobile, $code = false) { if (!$mobile) return false; if ($code === false) { //判斷60秒以內是否重復發送 if (!Cache::has('sms_' . $mobile)) return true; if (Cache::get('sms_' . $mobile)['times'] > time()) { return false; } else { return true; } } else { //判斷驗證碼是否輸入正確 if (!Cache::has('sms_' . $mobile)) return false; if (Cache::get('sms_' . $mobile)['code'] == $code) { return true; } else { return false; } } } /** * 設置手機短息驗證碼緩存 * #User: Mikkle * #Email:776329498@qq.com * #Date: * @param $data_cache */ protected function setRegSmsCache($data_cache) { Cache::set('sms_' . $data_cache['mobile'], $data_cache, 300); } ~~~ >[danger] 關于手機短信驗證碼這部分源碼只是簡簡單單的蒙蔽同手機號碼重復發送,如果真遇到惡意使用號碼變換軟件刷你的短信你是攔截不到的。所以自己還需要完善一下發送邏輯。我這里只是通過一個實例講解緩存 ### 緩存用作全局變量 用于驗證掃碼登錄 #### 微信接口端源碼 ~~~ /** * 微信API接口 掃碼登錄 * Power by Mikkle * QQ:776329498 * @param $EventKey * @param bool|false $subscribe * @return array */ protected function messageLogEvent($EventKey,$subscribe=false){ $user_model=new PersonnelUser(); if ($user_model ->where(['we_openid'=>$this->openid])->count() ==1 ){ //寫入登錄緩存 $log_data=[ 'code'=>1001, 'content'=>'登錄成功', 'data'=>$this->openid, ]; Cache::set('log_'.$EventKey,$log_data,120); if ($subscribe){ $reply=['type'=>'text','message'=>'感謝你的關注,你已經微信登錄成功.登錄ID['.$EventKey.']']; }else{ $reply=['type'=>'text','message'=>'你已經微信登錄成功.登錄ID['.$EventKey.']']; } }else{ $news_array=[ [ 'Title'=>'你的微信暫時未綁定ERP系統', 'Description'=>'現在去綁定', 'PicUrl'=>'', 'Url'=>$this->request->domain().'/erp/we_action/binding?sid='.$EventKey, ], ]; $reply=['type'=>'news','message'=>$news_array]; } return $reply; } ~~~ 掃碼端 輪詢查詢接口 ~~~ /** * 掃碼登錄 JavaScript輪詢查詢接口 * Power by Mikkle * QQ:776329498 * @return array */ public function loginWe(){ $sid = $this->request->param('sid'); // if (!$data->isAjax()) return $this->showReturnCodeWithOutData(1002); if (empty($sid)) return $this->showReturnCodeWithOutData(1003); $code = [ 'code' => -1 , 'sid' => $sid, ]; if (!Cache::has('log_'.$sid) ) return $this->showReturnCodeWithOutData(1031,'數據超時失效'); $cache_data=Cache::get('log_'.$sid); if($cache_data['code']==1001){ if ($this->setOpenidLogin($sid)){ $code['code']=1001; $code['data']=$this->fans_data; } }else{ $code['code']=1033; $code['msg']='等候掃描二維碼'; } return $code; } ~~~ >[info] 這里應用中 掃碼端 微信接口端 協同對登錄緩存值的的狀態進行修改 注:二維碼獲取接口同樣要一個緩存寫入,這里的sid就是在獲取二維碼接口時候生成的,這里就不詳細介紹了 感謝大家關注 交流請加QQ群 321449759 ![](https://box.kancloud.cn/3499008a08e64306c68873288092a057_286x340.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看