<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nginx+Redis 搭建高性能緩存利器

          共 1591字,需瀏覽 4分鐘

           ·

          2022-01-02 13:15

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          一. OpenResty

          OpenResty是一個(gè)基于 Nginx與 Lua的高性能 Web平臺(tái),其內(nèi)部集成了大量精良的 Lua庫(kù)、第三方模塊以及大多數(shù)的依賴項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài)Web 應(yīng)用、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。

          接入層緩存技術(shù)就是使用OpenResty的技術(shù)用Lua語(yǔ)言進(jìn)行二次開發(fā)。

          圖片

          二.Nginx +redis

          下圖左邊是常用的架構(gòu),http請(qǐng)求經(jīng)過(guò)nginx負(fù)載均衡轉(zhuǎn)發(fā)到tomcat,tomcat再?gòu)膔edis讀取數(shù)據(jù),整個(gè)鏈路過(guò)程是串行的,當(dāng)tomcat掛掉或者tomcat線程數(shù)被消耗完,就無(wú)法正常返回?cái)?shù)據(jù)。

          使用OpenResty的lua-resty-redis模塊使nginx具備直接訪問(wèn)redis的能力,不占用tomcat線程,Tomcat暫時(shí)掛掉仍可正常處理請(qǐng)求,減少響應(yīng)時(shí)長(zhǎng),提高系統(tǒng)并發(fā)能力。

          圖片

          三.壓縮減少帶寬

          數(shù)據(jù)大于1K,nginx壓縮再保存到redis:

          • 提高redis的讀取速度
          • 減少帶寬的占用

          壓縮會(huì)消耗cpu時(shí)間,小于1K的數(shù)據(jù)不壓縮tps更高。

          OpenResty并沒有提供redis連接池的實(shí)現(xiàn),需要自己用lua實(shí)現(xiàn)redis的連接池,在網(wǎng)上已有實(shí)現(xiàn)的例子http://wiki.jikexueyuan.com/project/openresty/redis/out_package.html,直接參照使用。

          Redis的value值用json格式保存{length:xxx,content:yyy},content是壓縮后的頁(yè)面內(nèi)容,length是content壓縮前的大小,length字段是為了在讀取redis時(shí),根據(jù)length的大小來(lái)判斷是否要解壓縮content的數(shù)據(jù)。

          使用lua-zlib庫(kù)進(jìn)行壓縮。

          圖片

          四. 定時(shí)更新

          按下圖第1和第2步定時(shí)執(zhí)行,nginx lua定時(shí)器定時(shí)請(qǐng)求tomcat頁(yè)面的url,返回的頁(yè)面html保存在redis。

          緩存有效期可設(shè)置長(zhǎng)些,比如1個(gè)小時(shí),可保證1個(gè)小時(shí)內(nèi)tomcat掛掉,仍可使用緩存數(shù)據(jù)返回,緩存的定時(shí)更新時(shí)間可設(shè)置短些,比如1分鐘,保證緩存快速更新

          圖片

          五.請(qǐng)求轉(zhuǎn)發(fā)

          瀏覽器打開頁(yè)面:

          • nginx先從redis獲取頁(yè)面html
          • redis不存在數(shù)據(jù)時(shí),從tomcat獲取頁(yè)面,同時(shí)更新redis
          • 返回頁(yè)面HTML給瀏覽器
          圖片

          六. 單進(jìn)程定時(shí)更新

          Nginx的所有worker進(jìn)程都可以處理前端請(qǐng)求轉(zhuǎn)發(fā)到redis,只有nginx worker 0才運(yùn)行定時(shí)任務(wù)定時(shí)更新redis,lua腳本中通過(guò)ngx.worker.id()獲取worker進(jìn)程編號(hào)。

          圖片

          七 . 可配置化

          通過(guò)管理后臺(tái)配置需要緩存的URL,可配置緩存URL、緩存有效期、定時(shí)更新時(shí)間,比如modify?url=index&&expire=3600000&&intervaltime=300000&sign=xxxx,sign的值是管理后臺(tái)secretkey對(duì)modify?url=index&&expire=3600000&&intervaltime=300000簽名運(yùn)算得到的,nginx端用相同的secretkey對(duì)modify?url=index&&expire=3600000&&intervaltime=300000簽名運(yùn)算,得到的值與sign的值相同則鑒權(quán)通過(guò),允許修改nginx的配置。

          圖片

          來(lái)源:blog.csdn.net/phil_code/article/details/79154271




          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  香蕉依人| 我爱操逼 | 在线久操| 国产一级理论片 | 日韩内射在线 |