iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 19
0
Modern Web

每日文章推薦系列 第 19

Day 19 快取(cache)

  • 分享至 

  • xImage
  •  

只講網頁會用到的

快取的歷史悠久

如果要從CPU開始講一定會跑題XD

所以先把範圍限縮在網頁會用到的就好

前端

前端的快取意義主要是不要抓沒更新的資料

所以理論上資料沒更新 就讀本地端的暫存就好

HTTP cache本身有他cache的機制 可以看下面這篇

http://blog.techbridge.cc/2017/06/17/cache-introduction/

另外是現在spa跟javascript控制內容的網站很多

所以也會利用js把各種東西暫存在client端

https://addyosmani.com/basket.js/

像這個玩意就會可以把檔案cache在localstorage

讓前端去快取很簡單

但是最麻煩的是控制那些不要快取 跟什麼時候要更新

尤其現在很多東西都會上CDN

就變成要控制CDN先去抓新東西 才有辦法讓lclient抓到了

後端資料快取

後端的快取主要是對處理過的資料作快取

讓資料可以不用短時間內重複處理

自然也就可以達到快速回應的效果

一開始玩可以先玩玩檔案快取

畢竟IO怎麼慢也可能比處理資料快

到後來可以玩memcache redis之類的服務

這兩個都是把資料存在記憶體裡面

所以IO都比檔案快取快

另外REDIS還有提供更多的功能可以玩

http://blog.techbridge.cc/2016/06/18/redis-introduction/

Redis 是一種快速、開放原始碼的記憶體內鍵值資料結構存放區。Redis 隨附一組多功能的記憶體內資料結構,讓您能夠輕鬆地建立各種自訂應用程式。Redis 主要使用案例包含快取、工作階段管理、發佈/訂閱以及排行榜。這是目前最熱門的鍵值存放區。已獲得 BSD 授權,以優化的 C 程式碼撰寫,且支援多種開發語言。Redis 是遠端字典伺服器 (REmote DIctionary Server) 的縮寫。

由於速度優勢和使用方便,Redis 成為需要最佳效能的 Web、行動、遊戲、廣告技術和物聯網應用程式的熱門選擇。AWS 透過稱為適用於 Redis 的 Amazon ElastiCache 的全受管且經過優化的資料庫服務提供 Redis 支援,也允許客戶在 AWS EC2 上執行自我管理的 Redis。

https://aws.amazon.com/tw/elasticache/what-is-redis/

之後再單獨寫REDIS好了 不然會跑題

更新時機

如果資料常更新 可以讓資料只讓cache存活短時間就好

像是論壇 就讓cache存活一分鐘就好

但如果資料不常更新 那可以讓cache存活久一點

類似新聞文章 有修改才去更新cache就好

負荷量

曾經問過一個大大 怎樣使用cache才能不讓DB crash

他給我的回應 我理解以後是 不管怎樣系統沒有cache都不應該會讓DB crash

所以看是要修改程式還是把DB upgrade都可以

cache的目的應該是拿來讓系統加速回應 而不是檔在DB前面讓他不會掛掉

以上是個人理解 不保證是前輩原話的表達XD

後端快取

寫到一半才想到要把頁面的快取特別拉出來

之前講的是資料處理跟畫面render的處理快取 通常是用資料的方式cache

但頁面的部分通常就會依網址做整份的快取

早期有名的服務是varnish

但現在大多都直接使用nginx內部的cache去做快取了

varnish還有RSI功能可以看一下

這點就算是nginx所沒有的了

打完以後去google 發現有人寫相關模組XD

雖然是九年前的事情了

CDN

CDN也能做到把整個頁面cache起來的事情

用的好的話 小主機要靠CDN撐大量用戶也不是問題

因為根本沒有連到你的主機啊XD

總結

快取是個很好用的東西

到處都用的到

用的好就帶你上天堂

用得不好真的會帶你住套房

更新不了會讓你很想打人

今日分享文章

今天看的文章

https://github.com/fripig/article_log/issues/427


上一篇
Day 18 測試
下一篇
Day 20 REDIS
系列文
每日文章推薦30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言