memcached快取使用錯誤

2021-09-13 09:29:31 字數 1110 閱讀 1620

專案用了memcached快取,但是在過完年回來上班的第二天專案首頁掛了,重啟後5分鐘又掛了,大家著急的在找各種原因。

專案一直執行的很正常,但是在2月7號早上9點突然無法訪問,重啟也解決不了問題。首先考慮的是資料庫連線數超了,把連線數直接提到100。然後nginx切換到備份專案,暫時解決了燃眉之急,ok,開始尋找問題出現的原因。開啟日誌檢視日誌,發現一直在報錯的是memcached,我懵逼了,這個memcached快取從16年12月開始執行一直到現在跑了3個月沒問題,怎麼就會把專案給整掛了。

再仔細檢視日誌,發現報錯的地方沒有連線資料庫的操作,那就不存在多個資料庫u連線沒有釋放的問題。解決了燃眉之急再把資料庫連線數切換回來,專案正常執行。memcached的快取報錯依舊,但是也沒有重現開始的問題。好吧,既然如此,那就開始解決memcached快取報錯的問題。

第乙個問題亂碼問題

!(/image/2017/02/20170217153113.png)

發現這個有很多亂碼,資料放不進去,我找了很久沒有解決這是什麼問題,之後發現這裡面存的東西是base64位的,而且還不止一張,但是放不進去也取不出來,最後歸結於存入的東西太大了或者裡面有特殊字元,這個不往快取裡放。改用後台排程將base64位字元轉為存在伺服器上,把鏈結存入資料庫,將轉換之後的資料存入資料庫後就沒有這個問題了。

第二個問題是序列化問題

程式啟動時將乙個實體類放入到快取裡面,我們用的是負載均衡,部署在兩台伺服器上,檢視日誌發現其中乙個專案能取到這個實體類時另乙個就無法取到。最後發現是在序列化的時候沒有顯示指定serialversionuid的值,所以在序列化時有可能就會給賦予了隨機值,在反序列化時會去找這個實體類再將這個serialversionuid相對比,如果兩個是一樣的,就認為是同乙個快取,如果不一樣就認為是新的快取。導致乙個能取到另外乙個就取不到快取,之後把所有的類都序列化並顯示定義uid就解決了這個問題。

在編寫**的時候一定要注意**規範,否則很可能就會因為自己的一時疏忽大意導致不明不白的問題出現。

快取使用錯誤及解決

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

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 建立...