接入層高效能快取技術nginx redis利器

2021-08-20 20:56:21 字數 2994 閱讀 2763

一. openresty

openresty

是乙個基於 

nginx

與 lua

的高效能 

web平台,其內部整合了大量精良的 

lua庫、第三方模組以及大多數的依賴項。用於方便地搭建能夠處理超高併發、擴充套件性極高的動態

web 

應用、web 

服務和動態閘道器。

接入層快取技術就是使用

openresty

的技術用

lua語言進行二次開發。

二.nginx +redis 

下圖左邊是常用的架構,

請求經過

nginx

負載均衡**到

tomcat

,tomcat

再從redis

讀取資料,整個鏈路過程是序列的,當

tomcat

掛掉或者

tomcat

執行緒數被消耗完,就無法正常返回資料。

使用openresty

的lua-resty-redis

模組使nginx

具備直接訪問

redis

的能力,不占用

tomcat

執行緒,tomcat

暫時掛掉仍可正常處理請求,減少響應時長,提高系統併發能力。

三.壓縮減少頻寬

資料大於1k,

nginx

壓縮再儲存到

redis:1

、提高redis

的讀取速度

2、減少頻寬的占用

壓縮會消耗

cpu時間,小於

1k的資料不壓縮

tps更高。

openresty

並沒有提供

redis

連線池的實現,需要自己用

lua實現

redis

的連線池,在網上已有實現的例子

,直接參照使用。

redis

的value

值用json

格式儲存

,content

是壓縮後的頁面內容,

length

是content

壓縮前的大小,

length

欄位是為了在讀取

redis

時,根據

length

的大小來判斷是否要解壓縮

content

的資料。

使用lua-zlib

庫進行壓縮。

定時更新

按下圖第1和第

2步定時執行,

nginx 

lua定時器定時請求

tomcat

頁面的url

,返回的頁面

html

儲存在redis

。快取有效期可設定長些,比如

1個小時,可保證

1個小時內

tomcat

掛掉,仍可使用快取資料返回,快取的定時更新時間可設定短些,比如

1分鐘,保證快取

快速更新

五.請求**

瀏覽器開啟頁面:1

、nginx

先從redis

獲取頁面

html2、

redis

不存在資料時,從

tomcat

獲取頁面,同時更新

redis

3、返回頁面

html

給瀏覽器

單程序定時更新

nginx

的所有worker

程序都可以處理前端請求**到

redis,只有

nginx 

worker 0

才執行定時任務定時更新

redis,

lua指令碼中通過

ngx.worker.id()

獲取worker

程序編號。

可配置化

通過管理後台配置需要快取的

url,

可配置快取

url、快取有效期、定時更新時間,比如

modify?url

=index&&expire=3600000&&

intervaltime

=300000&sign=

***x,sign

的值是管理後台

secretkey

對modify?url

=index&&expire=3600000&&

intervaltime

=300000

簽名運算得到的,

nginx

端用相同的

secretkey

對modify?url

=index&&expire=3600000&&

intervaltime

=300000

簽名運算,得到的值與

sign

的值相同則鑑權通過

,允許修改

nginx

的配置。

高效能快取實踐 快取穿透

問題快取穿透 大量的客戶端請求,引數都是無效的,導致直接穿過快取,直接查詢資料庫。需要將這些無效的請求引數,過濾,不直接查詢資料庫,減少資料庫的壓力。提供正常請求的響應率。解決方法 對於非法引數請求,通過前端後端的引數校驗,直接阻斷請求。使用spring boot cache 預設是快取null結果...

高效能Nginx最佳實踐

三,nginx配置location 配置塊 server 詳情 location會嘗試根據使用者請求中的uri來匹配location的uri表示式,如果可以匹配,就選擇location塊中的配置來處理使用者請求。示例 四,nginx常規配置 一 定義環境變數 語法 evn var var value...

構建Nginx Cache高效能快取系統

隨著nginx web伺服器得到越來越多的sa的青睞,nginx的cache功能已經具備squid所擁有的web快取加速功能 清除指定url快取的功能。而在效能上,nginx對多核cpu的利用,勝過squid不少。另外,在反向 負載均衡 健康檢查 後端伺服器故障轉移 rewrite重寫 易用性上,n...