久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

php+redis如何實現(xiàn)全頁緩存系統(tǒng)

小編給大家分享一下php+redis如何實現(xiàn)全頁緩存系統(tǒng),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

博州ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

php redis 實現(xiàn)全頁緩存系統(tǒng)

之前的一個項目說的一個功能,需要在后臺預先存入某個頁面信息放到數(shù)據(jù)庫,比如app的注冊協(xié)議,用戶協(xié)議,這種.然后在寫成一個php頁面,app在調(diào)用接口的時候訪問這個頁面.當時我就發(fā)現(xiàn)一個問題,這些協(xié)議往往幾個月才會修改一次,而每一次用戶查看這些協(xié)議的時候,nginx都會重新從數(shù)據(jù)庫讀取文件,速度會很慢慢了.

如下圖m_about.php是我生成的數(shù)據(jù)頁,

php+redis如何實現(xiàn)全頁緩存系統(tǒng)

在虛擬機環(huán)境下從數(shù)據(jù)庫加載出來重新生成文件需要2.4s(當然實際的測試環(huán)境會快一點).

既然這種頁面數(shù)據(jù)都是更新少,為什么不緩存起來呢,想到之前看的redis常用應用里面有一個全頁緩存系統(tǒng)(full page cache).不如寫一個試試看.

代碼思路

redis使用的是phpredis擴展,當然你也可是用predis擴展,只不過需要更改里面幾個讀取函數(shù)而已.

關(guān)于緩存系統(tǒng)的接口,我這里參考了laravel里面cache系統(tǒng).這個系統(tǒng)的設計接口我覺得設置的很清晰,里面不只是包含redis,還可以使用文件,MySQL,memcache.

當然全頁緩存用不到那么多東西.只是借用他的函數(shù)設計.首先是函數(shù)getUrlText,這個是獲取全頁面的數(shù)據(jù),這里沒有想到太多,直接使用file_get_contents,當然你也可以改寫成curl函數(shù)

/**
     * 獲取對應的url的信息
     * @param string $url 對應的地址
     * @return boolean|string
     */
    public function getUrlText($url)
    {
        if (empty($url)) {
            return false;
        }
        return  file_get_contents($url);

    }

其次是幾個借鑒cache系統(tǒng)的函數(shù),remember函數(shù),記憶緩存,這個是對外的最重要的接口,一般在緩存系統(tǒng)里面直接使用它就好.

/**
   * 記錄對應的緩存,如果之前存在則返回原本的緩存
   * @param string $cacheName 緩存名
   * @param string | callback $urlOrCallback 需要緩存的數(shù)據(jù)地址.可以是一個 網(wǎng)頁地址也一個可回調(diào)類型,如果不是可回調(diào)類型,則判定是一個網(wǎng)址
   * @param null | int $ttl 緩存過期時間,如果不過期就是用默認值null
   * @throws \Exception 如果無法訪問地址
   * @return boolean|string 緩存成功返回獲取到的頁面地址
   */
  public function remember($cacheName, $urlOrCallback, $ttl = null)
  {
      $value = $this->get($cacheName);//檢查緩存是否存在
      if (!$value) {
          //之前沒有使用鍵
          if (is_callable($urlOrCallback)) {
              $text = $urlOrCallback();
          } else {
              //如果不是回調(diào)類型,則嘗試讀取網(wǎng)址
              $text = $this->getUrlText($urlOrCallback);
          }

          if (empty($text)) {
              throw new \Exception('can not get value:' . $urlOrCallback);
          }
          $this->put($cacheName, $text, $ttl);
          return $text;
      } else {
          return $value;
      }

  }

refresh函數(shù),刷新緩存函數(shù),如果緩存頁面被更新了,就去刷新它.

/**
 * 更新緩存,并返回當前的緩存
 * @param string $cacheName 緩存名
 * @param string | callback $urlOrCallback 需要緩存的數(shù)據(jù)地址.可以是一個 網(wǎng)頁地址也一個可回調(diào)類型,如果不是可回調(diào)類型,則判定是一個網(wǎng)址
 * @param null | int $ttl 過期時間,如果不過期就是用默認值null
 * @return boolean|string 緩存成功返回獲取到的頁面地址
 */
public function refresh($cacheName, $urlOrCallback, $ttl = null)
{
    $this->delete($cacheName);
    return $this->remember($cacheName, $urlOrCallback, $ttl);
}

剩下的兩個代碼文件.一個是redisFPC.php,這是全頁緩存的demo,一個是測試用的文件
fpcTest.php
這里是用的是github,連接到我本人的git博客上面.如果連接github有問題,可以看本文最后給的完整代碼.

測試

我們在這里測試,第一次加載因為需要讀取對應的m_ahout的信息,所以慢一點

php+redis如何實現(xiàn)全頁緩存系統(tǒng)

第二次加載因為從redislimian 讀取了,所以會快的多
php+redis如何實現(xiàn)全頁緩存系統(tǒng)

使用建議

代碼我認為已經(jīng)給了足夠多的接口了,在第一次緩存的時候使用remember函數(shù)記錄緩存,之后如果緩存變化后使用refresh函數(shù),更新緩存即可.如果可能的話,盡量使用ttl設置緩存的過期時間.

完整代碼

redisFPC.php

<?php
namespace RedisFPC;
class RedisFPC
{
    /**
     * php redis的訪問類
     * @var unknown
     */
    private $redis;

    /**
     * 構(gòu)造函數(shù)
     * @param array $redis 使用phpredis的類
     * @param 是否連接成功
     */
    public function __construct($redis = [])
    {
    
        //$this->redis = $redis;
        $this->redis = new \Redis();
        return $this->redis->connect('127.0.0.1');
    }
    /**
     * 記錄對應的緩存,如果之前存在則返回原本的緩存
     * @param string $cacheName 緩存名
     * @param string | callback $urlOrCallback 需要緩存的數(shù)據(jù)地址.可以是一個 網(wǎng)頁地址也一個可回調(diào)類型,如果不是可回調(diào)類型,則判定是一個網(wǎng)址
     * @param null | int $ttl 緩存過期時間,如果不過期就是用默認值null
     * @throws \Exception 如果無法訪問地址
     * @return boolean|string 緩存成功返回獲取到的頁面地址
     */
    public function remember($cacheName, $urlOrCallback, $ttl = null) 
    {
        $value = $this->get($cacheName);//檢查緩存是否存在
        if (!$value) {
            //之前沒有使用鍵
            if (is_callable($urlOrCallback)) {
                $text = $urlOrCallback();
            } else {
                //如果不是回調(diào)類型,則嘗試讀取網(wǎng)址
                $text = $this->getUrlText($urlOrCallback);
            }
            
            if (empty($text)) {
                throw new \Exception('can not get value:' . $urlOrCallback);
            }
            $this->put($cacheName, $text, $ttl);
            return $text;
        } else {
            return $value;
        }
        
    }
    /**
     * 獲取對應的緩存值
     * @param string $cacheName 緩存名
     * @return String | Bool,如果不存在返回false,否則返回對應的緩存頁信息
     */
    public function get($cacheName)
    {
        return $this->redis->get($this->getKey($cacheName));
    }
    /**
     * 將對應的全頁緩存保存到對應redis中
     * @param string $cacheName 緩存名
     * @param string $value
     * @param null | int $ttl 過期時間,如果不過期就是用默認值null
     * @return boolean 保存成功返回true
     */
    public function put($cacheName, $value, $ttl = null)    
    {
        if (is_null($ttl)) {
            return $this->redis->set($this->getKey($cacheName), $value);
        } else {
            return $this->redis->set($this->getKey($cacheName), $value, $ttl);
        }
        
    }
    /**
     * 刪除對應緩存
     * @param string $cacheName 緩存名
     */
    public function delete($cacheName)
    {
        return $this->redis->delete($this->getKey($cacheName));
    }
    
    /**
     * 更新緩存,并返回當前的緩存
     * @param string $cacheName 緩存名
     * @param string | callback $urlOrCallback 需要緩存的數(shù)據(jù)地址.可以是一個 網(wǎng)頁地址也一個可回調(diào)類型,如果不是可回調(diào)類型,則判定是一個網(wǎng)址
     * @param null | int $ttl 過期時間,如果不過期就是用默認值null
     * @return boolean|string 緩存成功返回獲取到的頁面地址
     */
    public function refresh($cacheName, $urlOrCallback, $ttl = null)
    {
        $this->delete($cacheName);
        return $this->remember($cacheName, $urlOrCallback, $ttl);
    }
    /**
     * 獲取對應的url的信息
     * @param string $url 對應的地址
     * @return boolean|string
     */
    public function getUrlText($url)
    {
        if (empty($url)) {
            return false;
        } 
        return  file_get_contents($url);
        
    }
    /**
     * 生成全頁緩存鍵名
     * @param string $cacheName 需要緩存的名稱
     * @return string 對應的在redis中的鍵名
     */
    private function getKey($cacheName)
    {
        return 'FPC:'. $cacheName;
    }
}

測試用的test代碼
注意這里的url寫的是本地的緩存url

<?php 
use RedisFPC\RedisFPC;

require_once 'redisFPC.php';
/* $text = file_get_contents('http://localhost:1002/m_about.php');
var_dump($text); */
$url = 'http://localhost:1002/m_about.php';

$fpc = new RedisFPC();
echo $fpc->remember('服務協(xié)議', $url, 60*60*24);

以上是php+redis如何實現(xiàn)全頁緩存系統(tǒng)的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)站名稱:php+redis如何實現(xiàn)全頁緩存系統(tǒng)
當前地址:http://www.js-pz168.com/article30/gcjpso.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊網(wǎng)站排名品牌網(wǎng)站建設網(wǎng)站建設外貿(mào)建站商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
精品国产一区二区精华| 日韩国产欧美一区二区三区| 免费成人av在线播放| 成人h版在线观看| 麻豆91蜜桃| 欧美日韩国产系列| 国产午夜精品福利| 视频在线观看91| 97久久精品人人做人人爽| 日本精品一区二区三区不卡无字幕| 欧美日韩高清一区二区| 国产精品久久一卡二卡| 久久精品99国产精品| 国产精品香蕉视屏| 欧美色图在线观看| 国产精品国模大尺度视频| 美女国产一区二区三区| 国产精品国色综合久久| 欧美三级中文字幕| 成人欧美一区二区三区小说| 韩国中文字幕2020精品| 久久久一本精品99久久精品66 | 91小视频免费观看| 亚洲乱码国产乱码精品天美传媒| 欧美videossexotv100| 亚洲福中文字幕伊人影院| www.欧美日韩| 在线中文字幕一区二区| 中文av一区二区| 韩国v欧美v日本v亚洲v| 蜜桃欧美视频| 欧美大肚乱孕交hd孕妇| 午夜伦欧美伦电影理论片| 91捆绑美女网站| 欧美日免费三级在线| 亚洲欧美日韩小说| 成人免费毛片片v| 色综合色综合色综合 | 欧美在线高清视频| 亚洲少妇中出一区| www.亚洲国产| 在线精品国精品国产尤物884a| 国产精品午夜电影| 丁香激情综合国产| 日本韩国精品在线| 亚洲日本一区二区三区| 9i在线看片成人免费| 在线观看欧美精品| 亚洲自拍偷拍综合| 99re国产| 欧美一级理论片| 日韩精品成人一区二区三区| 精选一区二区三区四区五区| 精品久久久久久亚洲综合网| 麻豆精品一区二区三区| 欧美精品一区二区三区在线四季 | 国产精品区二区三区日本| 51精品视频一区二区三区| 天天综合日日夜夜精品| 裸模一区二区三区免费| 国产欧美在线观看一区| 高清在线观看日韩| 欧美羞羞免费网站| 亚洲电影一区二区三区| 欧美成人综合一区| 国产亚洲精品7777| 成人黄色在线网站| 欧美日韩成人综合天天影院| 五月激情综合婷婷| 日本黑人久久| 日韩一区在线看| eeuss一区二区三区| 欧美v日韩v国产v| 国产一区二区三区蝌蚪| 色老综合老女人久久久| 亚洲成人免费在线| 欧美亚洲一级二级| 亚洲欧洲美洲综合色网| 97操在线视频| 精品处破学生在线二十三| 国产精品1区2区3区| 欧美日韩精品系列| 麻豆精品视频在线观看视频| 制服国产精品| 亚洲成人777| 亚洲成人网上| 亚洲高清一区二区三区| 青青草成人激情在线| 亚洲欧美经典视频| 久久精品国产精品国产精品污 | 国产传媒一区在线| 555www色欧美视频| 国产在线一区观看| 精品视频在线免费| 六月婷婷色综合| 欧美亚洲综合色| 另类小说一区二区三区| 在线一区二区三区做爰视频网站| 偷拍日韩校园综合在线| 亚洲一区二区高清视频| 性做久久久久久| 一区二区精品免费视频| 亚洲va国产va欧美va观看| 亚洲国产综合自拍| 亚洲夂夂婷婷色拍ww47| 日韩一区二区电影在线观看| 亚洲午夜久久久久久久久电影院 | 亚洲色图.com| 日本不卡二区| 亚洲成人资源在线| 正在播放91九色| 美女一区二区视频| 欧美日韩一区二区三区在线看| 精品一区二区三区在线视频| 欧美日韩高清在线| 成人中文字幕在线| 久久久精品人体av艺术| 成人欧美视频在线| 最近中文字幕一区二区三区| 欧美美乳视频网站在线观看| 亚洲国产精品自拍| 日本韩国精品在线| 国产毛片一区二区| 亚洲精品一线二线三线 | 精品av久久707| 俄罗斯精品一区二区| 中文字幕一区二区三区四区| 日本一区二区三区精品视频| 偷偷要91色婷婷| 欧美三级电影网站| 成人激情免费电影网址| 日本一区二区在线不卡| 久久综合色一本| 性做久久久久久久免费看| 欧美亚洲免费在线一区| 国产91露脸合集magnet| 国产亚洲欧美激情| 欧美二区三区在线| 天堂va蜜桃一区二区三区漫画版 | 奇米777欧美一区二区| 欧美老肥妇做.爰bbww| www.色综合.com| 亚洲素人一区二区| 一区二区三区av| 国产精品911| 国产欧美一区二区精品忘忧草| 久久精品国产综合精品| 石原莉奈一区二区三区在线观看 | 日韩欧美一区二区在线观看| 美国欧美日韩国产在线播放| 欧美成人video| 精品乱子伦一区二区三区| 五月婷婷综合在线| 欧美一区二区视频免费观看| 成人91视频| 五月婷婷久久综合| 日韩欧美一二三| 国产在线精品日韩| 日本麻豆一区二区三区视频| 日韩欧美中文一区二区| 九九99玖玖| 久久97超碰国产精品超碰| 久久久精品综合| 婷婷亚洲婷婷综合色香五月| 国产麻豆日韩欧美久久| 国产精品你懂的在线| 色婷婷一区二区三区四区| 成人午夜免费视频| 亚洲女同一区二区| 精品1区2区3区| 高清不卡日本v二区在线| 天天影视涩香欲综合网| 欧美mv和日韩mv的网站| 日本一区二区三区四区在线观看 | 亚洲五月六月丁香激情| 欧美一三区三区四区免费在线看 | 国产成人精品aa毛片| 亚洲私人影院在线观看| 欧美三级电影网| 国产日产精品一区二区三区四区 | 成人高清视频免费观看| 艳妇臀荡乳欲伦亚洲一区| 欧美一卡2卡3卡4卡| 欧美大陆一区二区| 国产999精品久久| 亚洲美女免费视频| 91精品国产一区二区三区香蕉| 明星裸体视频一区二区| 国产成人精品www牛牛影视| 亚洲精品视频在线观看网站| 欧美一区二区三区视频在线| 日本成人三级电影网站| 成人av在线播放网址| 香蕉成人伊视频在线观看| 精品第一国产综合精品aⅴ| 亚洲一区二区在线免费观看| 91av一区二区三区| 九九热在线视频观看这里只有精品| 国产欧美日韩三级| 欧美日韩国产美|