1.Redis 快取的PHP 腳本來自:http://www.shenbogame.com.com/wordpress-with-redis-as-a-frontend-cache/
之後的最底部部分。 有關設定和配置的更多信息,請參閱此處:www.jeedo.net/lightning-fast-wordpress-with-nginx-redis/ 使用此腳本需要您自擔風險。我目前使用這個雖然有點
修改後的版本,每當顯示快取時都會顯示 Redis 徽章。 */ // 在此更改變數$cf = 1;// 如果您使用的是cloudflare,則設定為1 $debug = 0;// 如果您希望查看執行時間和快取操作,則設定為1 $display_powered_by_redis = 1; // 若要顯示包含執行時間的powered by redis 訊息,請設定為1,請參閱下方$start = microtime(); // 啟動計時頁執行// if cloudflare
啟用if ($cf) { if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { $_SERVER['REMOTE_ADDR'] = $_SERVERNEC['HTTP_CF_CONTINGVER_IP'] true); // 初始化predis include("predis.php"); $redis = new PredisClient('');
// 初始化變數$domain = $_SERVER['HTTP_HOST']; $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $url = str_replace('?r= y', '', $url); $url = str_replace('?c=y', '', $url); $dkey = md5($domain); $ukey = md5($url); // 檢查頁面是否沒有評論
提交 (isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] == 'max-age=0') ? $提交 = 1 : $提交 = 0; // 檢查是否登入 wp $cookie = var_export($_COOKIE, true); $loggedin = preg_match("/wordpress_logged_in/", $cookie); //
檢查頁面快取是否存在if ($redis->hexists($dkey, $ukey) && !$loggedin && !$submit && !strpos($url, '/feed/')) { echo $redis- >hget($ dkey, $ukey); $快取= 1; $msg = '這是一個快取'; // 如果提交了註解或清除頁面
已發出快取請求刪除頁面快取} else if ($submit || substr($_SERVER['REQUEST_URI'], -4) == '?r=y') { require('./wp-blog-header. php '); $redis->hdel($dkey, $ukey); $msg = '頁面快取已刪除'; // 刪除整個緩存,僅有效
若登入} else if ($loggedin && substr($_SERVER['REQUEST_URI'], -4) == '?c=y') { require('./wp-blog-header.php'); if ($ redis->exists($dkey)) { $redis->del($dkey); $msg = '網域快取已刷新'; } else { $msg = ' $msg = '
快取刷新'; } // 如果登錄,則不快取任何內容} else if ($loggedin) { require('./wp-blog-header.php'); $msg = '未快取'; /// 快取頁面} else { // 開啟輸出緩衝 ob_start(); require('./wp-blog-header.php');
// 取得輸出緩衝區的內容 $html = ob_get_contents(); // 清理輸出緩衝區 ob_end_clean(); 回顯$html; // 僅在頁面存在且沒有快取結果時才存在 if (!is_404() && !is_search()) { // 存儲
html 內容到redis 快取 $redis->hset($dkey, $ukey, $html); $msg = '快取已設定'; } } $end = microtime(); // 取得結束時間///啟用了偵錯則顯示訊息if ($debug) { echo $msg.': '; 迴聲t_exec($開始,$結束);
} if ($cached && $display_powered_by_redis) { // You should move this CSS to your CSS file and change the: float:right;margin:20px 0;
echo "";
echo "
".t_exec($start, $end)." sec
2、 你也可以直接點擊備用下載:index-with-redis.php下載位址。 Github專案:https://gist.github.com/JimWestergren/3053250#file-index-with-redis-php
3、 如果你正在使用cloudflare,請設定cf = 1; ,如果你想在頁面上看到腳本執行時間和快取載入時間,請設定$debug = 1; display_powered_by_redis = 1表示顯示powered_by資訊。
4、將index-with-redis.php上傳到Wordpress的根目錄,如果你使用的是nginx,重命令原來的index.php為任何其它名字,把index-with-redis.php重命名為index.php。
5、如果你使用的是Apache,則需要把.htaccess中出現的index.php替換成index-with-redis.php。
6、所有的操作完成後,你就可以刷新一下Wordpress頁面,查看Redis快取效果了。
7.實際使用過程中發現以上程式碼會出現Wordpress首頁和分類沒有及時緩存,這裡再給出優化版本,出自http://www.88shenbogame.com/lightning-fast-wordpress-with-nginx- redis/。
8、功能差不多,主要有:登入時頁面不快取、除非刪除或重置否則不刪除快取頁面、登入時在任意URL後加上?c=y可以刪除整個網站快取、在任意URL後面加上?c=y可以清除此URL快取、allow_fopen被禁止也可以正常運作、發表評論時刪除該頁面快取。
9、index-with-redis.php最佳化版本的原始碼是:
hexists($dkey, $ukey) && !$loggedin && !$submit) { echo $redis->hget($dkey, $ukey); if (!$debug) 退出(0); $msg = '這是一個快取'; // 如果提交了評論或發出了清除頁面快取請求,則刪除
頁面快取} else if ($submit || substr($_SERVER['REQUEST_URI'], -4) == '?r=y') { require('./wp-blog-header.php'); $redis ->hdel($dkey, $ukey); $msg = '頁面快取已刪除'; // 刪除整個緩存,僅在登入時才有效} else if ($loggedin
&& substr($_SERVER['REQUEST_URI'], -4) == '?c=y') { require('./wp-blog-header.php'); if ($redis->exists($dkey) ) { $redis->del($dkey); $msg = '網域快取已刷新'; } else { $msg = '沒有要刷新記錄的快取;
不緩存任何內容} else if ($loggedin) { require('./wp-blog-header.php'); $msg = '未快取'; // 快取頁面} else { // 開啟輸出緩衝 ob_start() ; require('./wp-blog-header.php'); // 取得輸出緩衝區的內容
$html = ob_get_contents(); '快取已設定'; $end = microtime(); // 取得結束執行時間// 顯示
如果啟用了偵錯,則顯示訊息if ($debug) { echo $msg.': '; 迴聲t_exec($開始,$結束); } // 時間差異函數t_exec($start, $end) { $t = (getmicrotime($end) - getmicrotime($start)); 回傳回合($t,5); } // 取得時間函數getmicrotime($t)
{ 列表($usec,$sec)=爆炸(“”,$t); 返回((浮點)$usec +(浮點)$sec); } ?>
以上只是介紹了安裝Redis 儲存的PHP 腳本,包括各方面的內容,希望對PHP 教學有興趣的朋友有幫助。