目標:利用memcache實現nginx對頁面/資源的快取,提高響應速度。
前提:1、nginx+lua模組。搭建nginx+lua環境參見nginx+lua+redis構建高併發應用(ubuntu) 和nginx+lua+redis構建高併發應用(centos/rehat)。
2、memcache服務已啟動。搭建linux下的memcache服務參見在linux上安裝memcached服務
nginx.conf配置如下:
解釋:set_memc :將請求的url和後端服務返回的有效結果組成key-value存入memcache服務。
memc_internal :向後端服務傳送請求url。
mem_req.lua如下:
--ngx.say("request_uri is : ", ngx.var.request_uri)
local cap_uri = "/memc_internal?key=" .. ngx.var.request_uri
local node_res = ngx.location.capture(cap_uri)
if node_res.status == 200 then
ngx.say(node_res.body)
local res = ngx.location.capture(
'/set_memc?key='..ngx.var.request_uri,
)--ngx.say("set_memc res is : ", res.status, res.body)
else
ngx.say("1111111111111", node_res.status, node_res.body);
end解釋:
當nginx在memcache服務中沒有查詢到快取時,執行mem_req.lua。其中,執行**後端請求,並將有效結果通過呼叫set_memc分支進行快取。
快取雪崩 快取穿透 快取預熱 快取更新 快取降級
簡介 快取同一時間大面積的失效,所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。解決辦法 中華石杉老師 簡介 一般是黑客故意去請求快取中不存在的資料,導致所有的請求都落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。解決辦法 最常見的則是採用布隆過濾器,將所有可能存在的資料...
快取穿透 快取併發 快取雪崩 快取預熱
快取穿透 快取併發和快取雪崩是常見的由高併發引起的快取問題,而快取預熱是快取雪崩的一種解決方案。快取穿透指的是併發使用大量快取中不存在的key進行查詢,由於快取無法命中,大量的查詢會穿過快取直接查詢資料庫,使得資料庫壓力太大,導致資料庫可能被拖垮。一般是受到了惡意的攻擊才會導致這種問題,所以一旦遇到...
快取 一 快取穿透 快取擊穿 快取雪崩
一 快取穿透 使用者請求的資料在快取和資料庫中都沒有,使用者卻還是一直在請求,造成資料庫大量無用資料庫操作,造成資源浪費。這種情況很可能是被攻擊了。解決方式 1 快取空資料 缺點 造成空間浪費,可以對資料設定有效期。2 布隆過濾器 二 快取擊穿 使用者請求資料快取中不存在,資料庫中存在。同時使用者併...