都是快取惹得禍

2021-03-31 08:56:57 字數 1404 閱讀 7183

首發於:都是快取惹得禍

最近專案開發完成了,在試執行時,發現幾個由於快取設定不當導致的問題,寫下來,和各位**一下,不妥之處,望指點一二

一,頁輸出快取導致的問題

問題描述:在乙個**首頁,有幾個使用者登入的框框,登陸後要隱藏起來,並顯示使用者的相關資訊,因為這個是首頁,考慮到訪問量很大,而且頁面的更新也比較少,所以使用<%@ outputcache duration="60" varybyparam="none"%>來啟用頁輸出快取,但發現乙個問題:第二使用者使用者登入後,看到確是第乙個使用者的登陸資訊

問題分析:頁輸出快取是在第乙個使用者發出請求後,把從動態頁中生成的靜態內容快取在伺服器的高速緩衝中,在設定的時間內,後續的請求都從該快取中響應,所以就有可能出現上面描述的問題了

問題解決:不使用頁輸出快取,這個是為個性化犧牲效能,但為了儘量減少效能

損失,除了在中間成做資料快取外,還要對頁面通過使用者控制項拆分,進行頁片斷快取

總結:通過這個問題,我發現凡是需要顯示個性化資訊的地方,通常都不合適做頁輸出快取,針對這個問題,為了提高效能,我有幾個想法:

1,登陸區域盡量考慮放在另乙個頁面中進行登陸 ;

2,需要個性化的資訊放在另一頁,然後iframe進來,這樣頁面可以同時兼顧個性     話和效能,適合個性化資訊比較少的情況 ;

3,如果頁面確實不能做頁輸出快取,那要考慮是否可以做頁片斷快取,始終要

考慮是否應該進行資料快取的問題

二,資料快取引起的問題

問題描述 :

我們對從資料庫中獲取到的年紀資訊進行快取,**如下:

public static gradecollection getgrades()

然後把資料加工後再邦定到乙個dropdownlist中:

gradecollection gc = getgrades() ;

grade g = new grade() ;

g.gradename = "所有年級" ;

gc.insert(0,g) ;

問題就出來,執行完這段**,別的地方再getgrades()獲得資料將會是被改動

過的資料,這並不是我們所期望的

問題解決 :不能對獲取的資料進行改動,我們的目的是在dropdownlist上加上乙個「所有年級」項,這個是可以在控制項上實現的,就不應該對資料加工了,但問題是我們無法確定其他地方getgrades()後會進行什麼操作,乙個方法的資料安全不

應該依賴於呼叫者的,所以需要對做了資料快取的地方進行改動:

public static gradecollection getgrades()

雖然這樣做,占用的記憶體會更多,效能上有折損,但資料更安全,程式更健壯了

同時也比不使用資料快取效能更高一些

但同時得承認,這不是乙個很好的解決方法,不知道各位大蝦有沒有遇到這類問題

你是怎麼解決的?望指點一二,不勝感激了!

都是快取惹得禍

最近專案開發完成了,在試執行時,發現幾個由於快取設定不當導致的問題,寫下來,和各位 一下,不妥之處,望指點一二 一,頁輸出快取導致的問題 問題描述 在乙個 首頁,有幾個使用者登入的框框,登陸後要隱藏起來,並顯示使用者的相關資訊,因為這個是首頁,考慮到訪問量很大,而且頁面的更新也比較少,所以使用 ou...

都是快取惹得禍

最近專案開發完成了,在試執行時,發現幾個由於快取設定不當導致的問題,寫下來,和各位 一下,不妥之處,望指點一二 一,頁輸出快取導致的問題 問題描述 在乙個 首頁,有幾個使用者登入的框框,登陸後要隱藏起來,並顯示使用者的相關資訊,因為這個是首頁,考慮到訪問量很大,而且頁面的更新也比較少,所以使用 ou...

都是快取惹得禍

最近專案開發完成了,在試執行時,發現幾個由於快取設定不當導致的問題,寫下來,和各位 一下,不妥之處,望指點一二 一,頁輸出快取導致的問題 問題描述 在乙個 首頁,有幾個使用者登入的框框,登陸後要隱藏起來,並顯示使用者的相關資訊,因為這個是首頁,考慮到訪問量很大,而且頁面的更新也比較少,所以使用 ou...