最近專案開發完成了,在試執行時,發現幾個由於快取設定不當導致的問題,寫下來,和各位**一下,不妥之處,望指點一二
一,頁輸出快取導致的問題
問題描述:在乙個**首頁,有幾個使用者登入的框框,登陸後要隱藏起來,並顯示使用者的相關資訊,因為這個是首頁,考慮到訪問量很大,而且頁面的更新也比較少,所以使用<%@ 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()
雖然這樣做,占用的記憶體會更多,效能上有折損,但資料更安全,程式更健壯了
同時也比不使用資料快取效能更高一些
但同時得承認,這不是乙個很好的解決方法,不知道各位大蝦有沒有遇到這類問題
你是怎麼解決的?望指點一二,不勝感激了!
memcached快取使用錯誤
專案用了memcached快取,但是在過完年回來上班的第二天專案首頁掛了,重啟後5分鐘又掛了,大家著急的在找各種原因。專案一直執行的很正常,但是在2月7號早上9點突然無法訪問,重啟也解決不了問題。首先考慮的是資料庫連線數超了,把連線數直接提到100。然後nginx切換到備份專案,暫時解決了燃眉之急,...
git使用錯誤
問題 第一次使用git,在配置好使用環境後,當我準備開始上傳本地專案,git push u origin master 發現乙個錯誤 rejected master master non fast forward error failed to push some refs to 於是我又重新檢查之...
this指標使用錯誤
todo 給person增加過載方法setname string,string public class main 錯誤 class person public void setname string name public void setname string name,string na 建立...