新聞中心
兒去了Redis緩存失蹤了:一場謎團

作為一家“創(chuàng)意+整合+營銷”的成都網(wǎng)站建設(shè)機構(gòu),我們在業(yè)內(nèi)良好的客戶口碑。創(chuàng)新互聯(lián)提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、創(chuàng)意表現(xiàn)、網(wǎng)頁制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營銷運營等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營模式與有效的網(wǎng)絡(luò)營銷方法,創(chuàng)造更大的價值。
在現(xiàn)代Web開發(fā)中,緩存是一個必不可少的組成部分。為了提高Web應(yīng)用程序的性能,大多數(shù)Web應(yīng)用程序都會使用緩存來減少對數(shù)據(jù)庫等關(guān)鍵資源的訪問次數(shù)。而Redis是一種流行的緩存技術(shù),因為它提供了高性能、可擴展和靈活的數(shù)據(jù)結(jié)構(gòu)。然而,最近Redis緩存在某個生產(chǎn)環(huán)境中突然失蹤了,這引起了極大的困擾。
這場失蹤事件的背景是這樣的:一家小型初創(chuàng)公司最近開發(fā)了一個新的Web應(yīng)用程序。這個應(yīng)用程序需要大量的讀寫操作,而為了提高性能,他們決定使用Redis緩存。他們在AWS上搭建了自己的Redis實例,并將應(yīng)用程序與Redis集成在一起。在開始對應(yīng)用程序進行測試以及準(zhǔn)備投入使用之前,他們都對Redis實例的性能進行了仔細(xì)的測試,并對相關(guān)配置文件進行了調(diào)優(yōu)。
然而,在應(yīng)用程序開始運行后的第一天,他們發(fā)現(xiàn)Redis緩存突然丟失了數(shù)百條鍵值對。令人困惑的是,Redis實例本身并沒有發(fā)生任何故障,而且他們之前進行的所有測試都沒有發(fā)現(xiàn)任何問題。經(jīng)過仔細(xì)的檢查,他們發(fā)現(xiàn)在從數(shù)據(jù)庫向Redis緩存寫入數(shù)據(jù)時發(fā)生了錯誤。他們的代碼在寫入數(shù)據(jù)之前會先從Redis中獲取數(shù)據(jù),以確保其最新,然后再進行寫入。
事實上,錯誤并不是由他們的代碼引起的,而是由Redis緩存本身引起的。他們發(fā)現(xiàn)Redis中的數(shù)據(jù)消失的規(guī)律非常奇怪:有些鍵值對存在很長時間,而其他的則只存在幾小時或幾分鐘。他們還發(fā)現(xiàn),在某些鍵值對消失之前,會有一個短暫的時間段,當(dāng)他們從Redis中獲取數(shù)據(jù)時,返回的結(jié)果是空的。這表明Redis在這個時間點之前已經(jīng)刪除了數(shù)據(jù)。但是,他們無法確定Redis刪除數(shù)據(jù)的原因或過程,因為Redis沒有任何日志記錄或錯誤信息。
在進一步檢查Redis客戶端和服務(wù)器之間通信的日志時,他們發(fā)現(xiàn)客戶端執(zhí)行了DEL命令(刪除鍵)的情況非常少,而且所有這些命令都是由他們的代碼引起的。這意味著,在Redis緩存失蹤期間,Redis服務(wù)器本身執(zhí)行了DEL命令。
他們的調(diào)查發(fā)現(xiàn),這是由Redis的過期機制引起的。他們之前將Redis的過期時間設(shè)置為0,以避免鍵過期。但是,當(dāng)Redis向滿狀況迎來數(shù)據(jù)寫入時,它會自動刪除一些已過期的鍵,以騰出更大的空間。在這種情況下,由于他們明確設(shè)置了鍵的過期時間為0,Redis實例將不會執(zhí)行DEL命令,因此在某些情況下Redis會刪除數(shù)據(jù)以騰出空間,因為過期鍵的時間到期,但是另一方面,由于他們設(shè)置了過期時間為0,又不執(zhí)行DEL命令,因此Redis不會刪除數(shù)據(jù)。這就產(chǎn)生了Redis緩存失蹤現(xiàn)象。
通過查看Redis的配置文件,他們成功地將Redis實例的過期時間正確地設(shè)置為默認(rèn)值,并刪除了所有設(shè)置為0的過期鍵。這結(jié)束了Redis緩存失蹤的問題。
作為開發(fā)人員,在使用緩存技術(shù)時,必須對緩存的運作方式有一定的了解,并根據(jù)自己的具體需求進行配置,以減少出現(xiàn)意外情況的可能性。此外,我們必須在開發(fā)和測試的過程中盡可能地考慮所有可能的情況,并編寫測試用例以測試不同的情況,以確保應(yīng)用程序能夠正確地跑起來。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站欄目:兒去了Redis緩存失蹤了一場謎團(redis緩存到哪)
文章地址:http://m.fisionsoft.com.cn/article/dpheijh.html


咨詢
建站咨詢
