201610-22 九種瀏覽器端緩存方法知多少 瀏覽器緩存(BrowserCaching)是瀏覽器端保存數據用于快速讀取或避免重復資源請求的優化機制,有效的緩存使用可以避免重復的網絡請求和瀏覽器快速地讀取本地數據,整體上加速網頁展示給用戶。瀏覽器端緩存的機制種類較多,總體歸納為九種,這里詳細分析下這九種緩存機制的原理和使用場景。打開瀏覽器的調試模式->resources左側就有瀏覽器的8種緩存機制。 一、http緩存 http緩存是基于HTTP... 繼續閱讀 >
201610-07 PHP 中九大緩存技術總結 1、全頁面靜態化緩存也就是將頁面全部生成html靜態頁面,用戶訪問時直接訪問的靜態頁面,而不會去走php服務器解析的流程。此種方式,在CMS系統中比較常見,比如dedecms;一種比較常用的實現方式是用輸出緩存:Ob_start()******要運行的代碼*******$content = Ob_get_contents();****將緩存內容寫入html文件*****Ob_end_clean();2、頁面部分緩存該種方式,是將一個頁面中不經常變的部分進行靜態緩存,而經常變化的塊... 繼續閱讀 >
201604-05 寫給后端程序員的HTTP緩存原理介紹 通過Internet獲取資源既緩慢,成本又高。為此,Http協議里包含了控制緩存的部分,以使Http客戶端可以緩存和重用以前獲取的資源,從而優化性能,提升體驗。雖然Http中關于緩存控制的部分,隨著協議演進,有一些變化。但我覺著,作為后端程序員,在開發Web服務時,只需要關注請求頭If-None-Match、響應頭ETag、響應頭Cache-Control就足夠了。因為這三個Http頭就可以滿足你的需求,并且,當今絕大多數的瀏覽器,都支持這三個Http... 繼續閱讀 >
201601-27 Yii2.0使用Redis使用技巧緩存 前些天簡單學習了下Redis,現在準備在項目上使用它了。我們目前用的是Yii2框架,在官網搜索了下Redis,就發現了yii2-redis這擴展。安裝后使用超簡單,打開common/config/main.php文件,修改如下。'cache'=>[//'class'=>'yii\caching\FileCache','class'=>'yii\redis\Cache',],'redis'=>['class'=>'yii\redis\Connection','hostname'=>'localhost','port'=>6379,'database'=>0,],... 繼續閱讀 >
201504-01 構建高并發高可用的電商平臺架構實踐(一)——設計理念 空間換時間多級緩存,靜態化客戶端頁面緩存(httpheader中包含Expires/CacheofControl,lastmodified(304,server不返回body,客戶端可以繼續用cache,減少流量),ETag)反向代理緩存應用端的緩存(memcache)內存數據庫Buffer、cache機制(數據庫,中間件等)索引哈希、B樹、倒排、bitmap哈希索引適合綜合數組的尋址和鏈表的插入特性,可以實現數據的快速存取。B樹索引適合于查詢為主導的場景,避免多次的IO,提高查... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(十):網站靜態化處理——動靜整合方案 上篇文章我簡要的介紹了下網站靜態化的演進過程,有朋友可能認為這些知識有點過于稀松平常了,而且網站靜態化的技術基點也不是那么高深和難以理解,因此它和時下日新月異的web前端技術相比,就顯得不倫不類了。其實當我打算寫本系列的之前我個人覺得web前端有一個點是很多人都知道重要,但是有常常低估它作用的,那就是web前端和web服務端如何融合的這個點上,這個點再加上我們要做出一個規模龐大,高并發,快速響應的網站時候它... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(九):網站靜態化處理總述 在存儲瓶頸的開篇我提到像hao123這樣的導航網站只要它部署的web服務器數量足夠,它可以承載超大規模的并發訪問量,如果是一個動態的網站,特別是使用到了數據庫的網站是很難做到通過增加web服務器數量的方式來有效的增加網站并發訪問能力的。但是現實情況是像淘寶、京東這樣的大型動態網站在承擔高并發的情況下任然能保證快速的響應,這其中有什么樣的技術手段可以達到動態網站支撐高并發的場景了,這也許是每個做web開發的朋友都... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(五):存儲的瓶頸(5) 上文里我遺留了兩個問題,一個問題是數據庫做了水平拆分以后,如果我們對主鍵的設計采取一種均勻分布的策略,那么它對于被水平拆分出的表后續的查詢操作將有何種影響,第二個問題就是水平拆分的擴容問題。這兩個問題在深入下去,本系列就越來越技術化了,可能最終很多朋友讀完后還是沒有找到解決實際問題的啟迪,而且我覺得這些問題都是像BAT這樣巨型互聯網公司才會認真思考的,因此本篇我打算換個角度來闡述本文的后續內容。這里... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(二):存儲的瓶頸(2) 上篇里我講到某些網站在高并發下會報出503錯誤,503錯誤的含義是指網站服務端暫時無法提供服務的含義,503還表達了網站服務端現在有問題但是以后可能會提供正常的服務,對http協議熟悉的人都知道,5開頭的響應碼表達了服務端出現了問題,在我們開發測試時候最為常見的是500錯誤,500代表的含義是服務端程序出現了錯誤導致網站無法正常提供服務,500通常是服務端異常和錯誤所致,如果生產系統里發現了500錯誤,那么只能說明網站存... 繼續閱讀 >
201503-06 關于大型網站技術演進的思考(一):存儲的瓶頸(1) 前不久公司請來了位互聯網界的技術大牛跟我們做了一次大型網站架構的培訓,兩天12個小時信息量非常大,知識的廣度和難度也非常大,培訓完后我很難完整理出全部聽到的知識,今天我換了個思路是回味這次培訓,這個思路就是通過本人目前的經驗和技術水平來思考下大型網站技術演進的過程。首先我們要思考一個問題,什么樣的網站才是大型網站,從網站的技術指標角度考慮這個問題人們很容易犯一個毛病就是認為網站的訪問量是衡量的指標... 繼續閱讀 >
201502-26 memcache的一致性hash算法使用詳解 一、概述1、我們的memcache客戶端(這里我看的spymemcache的源碼),使用了一致性hash算法ketama進行數據存儲節點的選擇。與常規的hash算法思路不同,只是對我們要存儲數據的key進行hash計算,分配到不同節點存儲。一致性hash算法是對我們要存儲數據的服務器進行hash計算,進而確認每個key的存儲位置。2、常規hash算法的應用以及其弊端最常規的方式莫過于hash取模的方式。比如集群中可用機器適量為N,那么key值為K的的數據請求... 繼續閱讀 >
201501-31 PHP文件緩存類 cache.inc.php類<?phpclassCache{/***$dir:緩存文件存放目錄*$lifetime:緩存文件有效期,單位為秒*$cacheid:緩存文件路徑,包含文件名*$ext:緩存文件擴展名(可以不用),這里使用是為了查看文件方便*/private$dir;private$lifetime;private$cacheid;private$ext;/***析構函數,檢查緩存目錄是否有效,默認賦值*/function__construct($dir='',$lifetime=... 繼續閱讀 >
201501-20 通俗講解:緩存、緩存算法和緩存框架 引言我們都聽過cache,當你問他們是什么是緩存的時候,他們會給你一個完美的答案,可是他們不知道緩存是怎么構建的,或者沒有告訴你應該采用什么標準去選擇緩存框架。在這邊文章,我們會去討論緩存,緩存算法,緩存框架以及哪個緩存框架會更好。面試“緩存就是存貯數據(使用頻繁的數據)的臨時地方,因為取原始數據的代價太大了,所以我可以取得快一些。”這就是programmerone(programmerone是一個面試者)在面試... 繼續閱讀 >
201501-04 EhCache緩存系統在集成環境中的使用詳解 Ehcache 緩存系統簡介EhCache是一個純Java的進程內緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。下圖是EhCache在應用程序中的位置:圖1.EhCache應用架構圖EhCache的主要特性有:快速;簡單;多種緩存策略;緩存數據有兩級:內存和磁盤,因此無需擔心容量問題;緩存數據會在虛擬機重啟的過程中寫入磁盤;可以通過RMI、可插入API等方式進行分布式緩存;... 繼續閱讀 >
201412-11 優化MySQL 還是使用緩存? 今天我想對一個Greenfield項目上可以采用的各種性能優化策略作個對比。換言之,該項目沒有之前決策強加給它的各種約束限制,也還沒有被優化過。具體來說,我想比較的兩種優化策略是優化MySQL和緩存。提前指出,這些優化是正交的,唯一讓你選擇其中一者而不是另一者的原因是他們都耗費了資源,即開發時間。優化MySQL優化MySQL時,一般會先查看發送給mysql的查詢語句,然后運行explain命令。稍加審查后很常見的做... 繼續閱讀 >
201412-03 5個強大的Java分布式緩存框架推薦 在開發中大型Java軟件項目時,很多Java架構師都會遇到數據庫讀寫瓶頸,如果你在系統架構時并沒有將緩存策略考慮進去,或者并沒有選擇更優的緩存策略,那么到時候重構起來將會是一個噩夢。本文主要是分享了5個常用的Java分布式緩存框架,這些緩存框架支持多臺服務器的緩存讀寫功能,可以讓你的緩存系統更容易擴展。1、Ehcache–Java分布式緩存框架Ehcache是一個Java實現的開源分布式緩存框架,EhCache可以有效... 繼續閱讀 >