Nginx 高階篇(四)Nginx 直連 memcache

huxiaobai_001發表於2020-03-19

nginx當中可以實現直連memcache,這樣比通過nginx轉發到php,再由php的memcache擴充套件調取memcache庫裡面的方式至少快6倍!

nginx的memcached_module模組可以直接從memcached伺服器中讀取內容後輸出,後續的請求不再經過應用程式處理,如php-fpm、django,大大的提升動態頁面的速度。nginx只負責從memcached伺服器中讀取資料,要往memcached寫入資料還得需要後臺的應用程式來完成,主動的將要快取的頁面快取到memcached中,可以通過404重定向到後端去處理的。
ngx_http_memcached_module可以操作任何兼用memcached協議的軟體。如ttserver、membase等

結構圖如下所示:

Nginx高階篇(四)Nginx直連memcache
memcached的key可以通過memcached_key變數來設定,如以$uri。如果命中,那麼直接輸出內容,沒有命中就意味著nginx需要從應用程式請求頁面。同時,我們還希望該應用程式將鍵值對寫入到memcached,以便下一個請求可以直接從memcached獲取
如果鍵值不存在,nginx將報告not found錯誤。最好的方法是使用error_page指定和location請求處理。同時包含”Bad Gateway”錯誤和”Gateway Timeout”錯誤,如:error_page 404 502 504 = @app ;。

server{

    location / {

        set $memcached_key "$uri"; #192.168.1.200/1.html 會把 /1.html 當作 key 去判斷 mem中有沒有快取。
        memcached_pass 127.0.0.1:11211;
        error_page 404 /callback.php;#捕捉 404 資訊 ,就回撥 callback 頁面,在根目錄 html 目錄下

            }

   }

回撥頁面【html/callback.php】:

<?php

   $uri=$_SERVER['REQUEST_URI'];          //獲得訪問的頁面。

   //就可以根據訪問的頁面進行相應的資料庫操作 讀取資料返回並將資料寫入到memcache當中去

?>

但是你可要知道memcache 是不能持久化資料的哈 也沒有安全校驗機制 不像redis一樣 你要是將memcache對外開放 外網能訪問其實還是比較危險的 別人寫個指令碼定時請求你 你的memcache服務就蹦嘍!不能持久化也是個蛋疼的事!一重啟全沒了!不過也沒關係,再去請求php寫入到memcache!所以這種案例只適用於單存起到快取作用的場景下!
更多實戰請看:https://www.cnblogs.com/lpfuture/p/5800042...
當然Nginx當中也可以直接連線redis 速度相當快 效能相當高 安全性降低!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

胡軍

相關文章