企业技术
緩存使用條件: 1.訪問量大 2.數據不經常更新 緩存缺點:容易產生【臟數據】---? 即:當用戶第一次訪問頁面,讀取數據庫,并將數據存入緩存后,在該緩存失效前,其他訪問都是讀取緩存中的數據;但如果此期間數據庫的數據發生改變,那么 緩存里保存的數據 和 數據庫的數據就不一致了!這就是所謂的緩存臟數據。 解決問題:使用【緩存依賴】可以解決這個【臟數據】問題。即:啟用依賴機制,此機制會負責監測物理數據(數據庫/文本文件)是否發生改變,一旦發生改變則去緩存中刪除對應的緩存(鍵值對)。
Session和Cache相同點: 1.都是保存狀態的機制 2.都存在服務器端 3.鍵值對
Session和Cache的區別: Cache:所有用戶都共有的,共享數據。 Session:單個用戶使用,相互之間不共享Session數據。根據瀏覽器用Cookie保存的SessionId來決定訪問的數據。
瀏覽器端緩存機制: 1.當瀏覽器使用get方式請求服務器時,瀏覽器會先到瀏覽器端臨時文件夾中 根據頁面名稱 查找看是否有緩存版本,如果有,則直接讀取,不再發送請求到服務器。 2.當瀏覽器使用post方式請求服務器時,瀏覽器會直接發送請求報文到服務器,而不去檢查臨時文件夾。 ? 當時,當請求報文中包含If-Modified-Since時間的時候,服務器會根據該時間判斷服務端緩存是否失效,如果沒有失效,則返回304狀態碼給瀏覽器,瀏覽器則讀取緩存。
服務器為什么會根據If-Modified-Since來生成304狀態碼? 1.服務器就知道瀏覽器端有緩存。 2.服務器就不再讀取服務器端的緩存。 3.服務器生成的響應報文中就不必包含報文體(頁面html代碼),從而減輕了回傳的數據量。 4.此機制也可以保證,瀏覽器端頁面緩存和服務器端的緩存一致。
使用進程外Session的缺點: 1.必須序列化和反序列化 2.因為要把session數據發給 狀態服務程序 或 數據庫,所以存在發送數據時的資源消耗。 注意:當我們把網站部署到IIS后,配置文件里如果使用進程外 Session(數據庫),就必須再配置文件中制定 數據庫連接字符串。
1.HttpApliationFactory -> ?? 1.1GetNormalApplicationInstance(HttpContext context) : ?????? 1.1.1通過反射的方式創建了 HttpApplication或者 Global.asax類對象 ?????? 代碼application = (HttpApplication) HttpRuntime.CreateNonPublicInstance(this._theApplicationType); ?????? 1.1.2調用程序員寫的過濾器(HttpModule)集合里的Init方法為HttpApplication對象的事件注冊方法。
http://localhost:3229/web/NewDetail/1
http://localhost:3229/web/NewDetail.aspx?id=1
ProcessRequestMain-> if (this.IsInAspCompatMode){AspCompatApplicationStep.OnPageStartSessionObjects();} PreInit-PerformPreInit()-> //預初始化:準備初始化頁面控件,設置皮膚。 Init-InitRecursive(null)->//頁面對象初始化 InitComplete(OnInitComplete-EventArgs.Empty)->//頁面初始化完成:登記用戶觸發的事件。 if (this.IsPostBack){ -> LoadState-LoadAllState()加載ViewState,-> ProcessPostData-ProcessPostData(this._requestValueCollection, true)還原控件狀態 }-> PreLoad-OnPreLoad(EventArgs.Empty) -> Load-LoadRecursive() -> if (this.IsPostBack){ ProcessPostData Second Try-ProcessPostData(this._leftoverPostData, false) -> Raise ChangedEvents-RaiseChangedEvents() -> Raise PostBackEvent-RaisePostBackEvent(this._requestValueCollection);}//觸發控件事件 LoadComplete-OnLoadComplete(EventArgs.Empty) -> if (!this.IsCrossPagePostBack){->PreRenderComplete-PerformPreRenderComplete()//頁面生成前準備} -> SaveState-SaveAllState() ->SaveStateComplete-OnSaveStateComplete(EventArgs.Empty) ->//保存頁面和控件數據到ViewState Render-RenderControl(this.CreateHtmlTextWriter(this.Response.Output))
1.BeginRequest? 開始處理請求 2.AuthenticateRequest 授權驗證請求,獲取用戶授權信息 3.PostAuthenticateRequest 獲取成功 4.AunthorizeRequest 授權,一般來檢查用戶是否獲得權限 5.PostAuthorizeRequest 獲得授權 6.ResolveRequestCache 獲取頁面緩存結果(如果沒有則執行) 7.PostResolveRequestCache 已獲取緩存 8.PostMapRequestHandler 創建頁面對象 9.AcquireRequestState 獲取Session -- 先判斷當前頁面對象是否實現了IRequiresSessionState接口,如果實現了,則從瀏覽器發來的請求報文頭中獲得SessionId,并到服務器的 Session池中獲得對應的Session對象,最后賦值給 HttpContext的Session屬性。 10.PostAcquireRequestState 獲得Session 11.PreRequestHandlerExecute 準備執行頁面對象 ×執行頁面對象的ProcessRequest方法(1.ashx,1.aspx),如果請求的是1.aspx,則會運行頁面生命周期 12.PostRequestHandlerExecute 執行完頁面對象了 13.ReleaseRequestState 釋放請求狀態 14.PostReleaseRequestState 已釋放請求狀態 15.UpdateReuqestCache 更新緩存 16.PostUpdateRequestCache 已更新緩存 17.LogRequest 日志記錄 18.PostLogRequest 已完成日志 19.EndRequest 完成
主要內容: 母板頁 頁面級緩存,控件緩存,簡單緩存,帶失效時間的簡單緩存,文件緩存依賴,進程外Session(2種),微軟Ajax核心組件,全局文件,錯誤頁,IIS配置,頁面生命周期(事件自動注冊機制),HttpApplication的處理過程; 抽象工廠 三層(反射工廠三層),總復習
?
?
?
?
緩存使用是有原則的,不是每個頁面都用緩存就好,畢竟它是占用服務器端資源的。所以一般是訪問量特別大的就用,而且數據更新不頻繁。 aspnet_regsql -S . -E -ed -d ItcastSIM -et -t Classes
asp.net全局配置文件(重寫到 jsp可以,但重寫到java可以嗎?)C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG
轉載于:https://www.cnblogs.com/zxp19880910/archive/2012/09/01/2666288.html
總結
- 上一篇: rsync推拉模型及结合inotify实
- 下一篇: Struts2中的OGNL详解