日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

多亏我缓存技术过硬!疫情防控项目上线,我只用了5天!

發(fā)布時(shí)間:2023/12/4 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多亏我缓存技术过硬!疫情防控项目上线,我只用了5天! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先介紹下背景,我是武漢某O2O電商公司開(kāi)發(fā)組長(zhǎng),疫情震中的我被老板要求7天之內(nèi)上線(xiàn)《疫情防控?zé)狳c(diǎn)圖》項(xiàng)目,幾個(gè)組員回老家斷網(wǎng),最終就2個(gè)人完成開(kāi)發(fā)上線(xiàn),滿(mǎn)足了10w+用戶(hù)的高頻訪(fǎng)問(wèn)。時(shí)間和人力都緊張,不能按照常態(tài)模式開(kāi)發(fā),很多技術(shù)選型也跟平時(shí)迥異。本文為大家專(zhuān)題分享一下緩存在本項(xiàng)目中的使用和踩的幾個(gè)典型的坑,希望對(duì)大家能有所幫助。

緩存Cache

緩存Cache是系統(tǒng)架構(gòu)、性能優(yōu)化的必備技能,也是新年跳槽季必考哦。核心思路就是把高頻耗資源數(shù)據(jù)找個(gè)地方存儲(chǔ)著,下次需要的時(shí)候直接使用,既能避免重復(fù)請(qǐng)求以降低壓力,也能更快捷獲取以提升性能。可能有小伙伴兒覺(jué)得疫情熱點(diǎn)圖要求實(shí)時(shí)更新,哪里用得上緩存?那你就太年輕了。本文一方面梳理下項(xiàng)目過(guò)程中各種緩存的原理、具體應(yīng)用場(chǎng)景,踩過(guò)的坑和解決辦法,另一方面也是希望拋磚引玉,歡迎大家多多,給予建議。

客戶(hù)端緩存

按慣例,從前往后說(shuō)。客戶(hù)端緩存指的是讓瀏覽器將一些數(shù)據(jù)緩存重用,避免重復(fù)請(qǐng)求。基本原理是利用Http協(xié)議緩存協(xié)商,在ResponseHeader里面指定下緩存策略即可,適合緩存一些靜態(tài)資源。

本項(xiàng)目中用的非常多,各種css、js和小圖標(biāo)文件,都直接設(shè)置了30天緩存有效期,資源更新時(shí),采用的是版本號(hào)緩存更新模式,直接在每個(gè)資源請(qǐng)求后面都帶上了版本號(hào),簡(jiǎn)單粗暴完成緩存更新。? ? ? ? ? ?

CND緩存&反向代理緩存

?????? CDN緩存和反向代理緩存的思路是差不多的,一個(gè)Http請(qǐng)求要經(jīng)過(guò)DNS,要經(jīng)過(guò)反向代理,那么在這兩個(gè)環(huán)節(jié)加一層緩存也是必須的。不過(guò)由于項(xiàng)目開(kāi)發(fā)周期短,7天就要求上線(xiàn),CDN沒(méi)折騰,反向代理緩存倒是立了大功。

項(xiàng)目的后端是3個(gè)Core WebApi服務(wù)實(shí)例構(gòu)建的集群,用Nginx做的負(fù)載均衡,然后加了個(gè)緩存解決了一個(gè)高頻場(chǎng)景,小區(qū)周邊疫情熱點(diǎn)圖。用Url+小區(qū)Id作為key,直接緩存了整個(gè)動(dòng)態(tài)頁(yè),有效期1小時(shí)。很多用戶(hù)進(jìn)來(lái)就是看下自己小區(qū)熱點(diǎn)圖然后關(guān)閉了,差不多攔截了40%的請(qǐng)求量,反向代理緩存效果不要太牛!

本地緩存&分布式緩存

兩個(gè)都是服務(wù)端緩存,Asp.Net Core內(nèi)置了MemoryCache作為本地緩存,也非常友好的支持了Redis分布式緩存,二者都是利用內(nèi)存緩存數(shù)據(jù)重用以加快速度。由于后端是做的集群,為方便緩存共享,只用了Redis分布式緩存。

能緩存的數(shù)據(jù)就很多了,項(xiàng)目里幾乎全部的數(shù)據(jù)都走了一遍緩存,即使是大家認(rèn)為的實(shí)時(shí)數(shù)據(jù),項(xiàng)目里面也是采用的雙寫(xiě)方案,同步寫(xiě)數(shù)據(jù)庫(kù)和Redis,查詢(xún)直接走的Redis。此外,為減小數(shù)據(jù)寫(xiě)入壓力,像用戶(hù)登錄、瀏覽記錄、頁(yè)面訪(fǎng)問(wèn)次數(shù)等即時(shí)信息也都是放在Redis里面的,滿(mǎn)100次或者1h才同步一次數(shù)據(jù)庫(kù)。

緩存的坑

?????? 正常狀況下的緩存使用還是挺簡(jiǎn)單的,最怕是遇到異常情況。這次項(xiàng)目不大,但是因?yàn)闀r(shí)間倉(cāng)促,很多細(xì)節(jié)沒(méi)處理好,幾個(gè)緩存常見(jiàn)的坑都給踩了一遍。

?????? 系統(tǒng)是在催促中上線(xiàn)的,沒(méi)有經(jīng)過(guò)任何緩存預(yù)熱,直接公眾號(hào)push了一波通知,流量短時(shí)間沖上去了,這時(shí)候Redis里面還是空的,請(qǐng)求直接都到數(shù)據(jù)庫(kù)了,上線(xiàn)10分鐘后就掛了。解決辦法是快速寫(xiě)了個(gè)控制臺(tái),把數(shù)據(jù)訪(fǎng)問(wèn)了一遍,初始化到Redis里面完成緩存預(yù)熱就可以了。

???????

然而,填完這個(gè)坑,又引出了新的坑。緩存預(yù)熱時(shí)沒(méi)注意緩存有效期的設(shè)置,緩存預(yù)熱時(shí)將數(shù)據(jù)的過(guò)期時(shí)間都設(shè)置成了4小時(shí),結(jié)果在4小時(shí)之后大量緩存同時(shí)過(guò)期,請(qǐng)求都到數(shù)據(jù)庫(kù)了,幸虧當(dāng)時(shí)是晚上10點(diǎn),數(shù)據(jù)庫(kù)好歹沒(méi)倒。火速把項(xiàng)目升級(jí)了一下,將過(guò)期時(shí)間做了個(gè)隨機(jī)變化,避免因?yàn)橥瑫r(shí)過(guò)期而造成的緩存雪崩。

?????? 最后是項(xiàng)目運(yùn)行一周后,發(fā)現(xiàn)數(shù)據(jù)庫(kù)的壓力突然又上來(lái)了。通過(guò)日志排查發(fā)現(xiàn)是某個(gè)IP一直用一個(gè)不存在的數(shù)據(jù)Id高頻訪(fǎng)問(wèn)(猜測(cè)是友商在測(cè)試),因?yàn)閿?shù)據(jù)庫(kù)沒(méi)有這個(gè)數(shù)據(jù),緩存總是無(wú)法命中,導(dǎo)致請(qǐng)求都穿透緩存到了數(shù)據(jù)庫(kù)。解決辦法也簡(jiǎn)單,緩存邏輯加了個(gè)key-null,沒(méi)有數(shù)據(jù)也能緩存。

?????? 上面整理了項(xiàng)目中各種緩存的基本原理和使用場(chǎng)景,也總結(jié)了自己踩的幾個(gè)坑,希望能給大家一些幫助,也歡迎大家交流拍磚。具體的代碼實(shí)現(xiàn)沒(méi)法為大家一一展示(項(xiàng)目還在運(yùn)營(yíng)),不過(guò)我這里很用心的為大家推薦一個(gè)課程,是我最崇拜的Eleven老師講的,文中關(guān)于緩存的方方面面都會(huì)覆蓋到(本文也是應(yīng)Eleven老師邀請(qǐng)寫(xiě)的),而且還是免費(fèi)的哦!

? 最后,體貼的Eleven老師還說(shuō)了,要給大家準(zhǔn)備一組預(yù)習(xí)資料,方便大家的學(xué)習(xí),大家趕緊掃碼加美女小助教領(lǐng)取免費(fèi)預(yù)習(xí)資料咯。架構(gòu)師之路,道阻且長(zhǎng),愿大家一起共同成長(zhǎng)!

總結(jié)

以上是生活随笔為你收集整理的多亏我缓存技术过硬!疫情防控项目上线,我只用了5天!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。