這篇文章主要介紹了redis中緩存雪崩、緩存擊穿、緩存穿透指的是什么意思,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括開陽網(wǎng)站建設(shè)、開陽網(wǎng)站制作、開陽網(wǎng)頁制作以及開陽網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,開陽網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到開陽省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!什么是redis緩存?
Redis緩存是一個(gè)開源的使用ANSIC語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
redis緩存的作用是什么?
Redis緩存的使用,極大的提升了應(yīng)用程序的性能和效率,特別是數(shù)據(jù)查詢方面。但同時(shí),它也帶來了一些問題。其中,最要害的問題,就是數(shù)據(jù)的一致性問題,從嚴(yán)格意義上講,這個(gè)問題無解。如果對(duì)數(shù)據(jù)的一致性要求很高,那么就不能使用緩存。
另外的一些典型問題就是,緩存穿透、緩存雪崩和緩存擊穿。目前,業(yè)界也都有比較流行的解決方案。本篇文章,并不是要更加完美的解決這三個(gè)問題,也不是要顛覆業(yè)界流行的解決方案。而是,從實(shí)際代碼操作,來演示這三個(gè)問題現(xiàn)象。之所以要這么做,是因?yàn)?,僅僅看這些問題的學(xué)術(shù)解釋,腦袋里很難有一個(gè)很形象的概念,有了實(shí)際的代碼演示,可以加深對(duì)這些問題的理解和認(rèn)識(shí)。
緩存穿透
緩存穿透,是指查詢一個(gè)數(shù)據(jù)庫一定不存在的數(shù)據(jù)。正常的使用緩存流程大致是,數(shù)據(jù)查詢先進(jìn)行緩存查詢,如果key不存在或者key已經(jīng)過期,再對(duì)數(shù)據(jù)庫進(jìn)行查詢,并把查詢到的對(duì)象,放進(jìn)緩存。如果數(shù)據(jù)庫查詢對(duì)象為空,則不放進(jìn)緩存。
代碼流程
1、參數(shù)傳入對(duì)象主鍵ID
2、根據(jù)key從緩存中獲取對(duì)象
3、如果對(duì)象不為空,直接返回
4、如果對(duì)象為空,進(jìn)行數(shù)據(jù)庫查詢
5、如果從數(shù)據(jù)庫查詢出的對(duì)象不為空,則放入緩存(設(shè)定過期時(shí)間)想象一下這個(gè)情況,如果傳入的參數(shù)為-1,會(huì)是怎么樣?這個(gè)-1,就是一定不存在的對(duì)象。就會(huì)每次都去查詢數(shù)據(jù)庫,而每次查詢都是空,每次又都不會(huì)進(jìn)行緩存。假如有惡意攻擊,就可以利用這個(gè)漏洞,對(duì)數(shù)據(jù)庫造成壓力,甚至壓垮數(shù)據(jù)庫。即便是采用UUID,也是很容易找到一個(gè)不存在的KEY,進(jìn)行攻擊。
小編在工作中,會(huì)采用緩存空值的方式,也就是【代碼流程】中第5步,如果從數(shù)據(jù)庫查詢的對(duì)象為空,也放入緩存,只是設(shè)定的緩存過期時(shí)間較短,比如設(shè)置為60秒。
(學(xué)習(xí)視頻分享:redis視頻教程)
緩存雪崩
緩存雪崩,是指在某一個(gè)時(shí)間段,緩存集中過期失效。
產(chǎn)生雪崩的原因之一,比如在寫本文的時(shí)候,馬上就要到雙十二零點(diǎn),很快就會(huì)迎來一波搶購,這波商品時(shí)間比較集中的放入了緩存,假設(shè)緩存一個(gè)小時(shí)。那么到了凌晨一點(diǎn)鐘的時(shí)候,這批商品的緩存就都過期了。而對(duì)這批商品的訪問查詢,都落到了數(shù)據(jù)庫上,對(duì)于數(shù)據(jù)庫而言,就會(huì)產(chǎn)生周期性的壓力波峰。
小編在做電商項(xiàng)目的時(shí)候,一般是采取不同分類商品,緩存不同周期。在同一分類中的商品,加上一個(gè)隨機(jī)因子。這樣能盡可能分散緩存過期時(shí)間,而且,熱門類目的商品緩存時(shí)間長一些,冷門類目的商品緩存時(shí)間短一些,也能節(jié)省緩存服務(wù)的資源。
其實(shí)集中過期,倒不是非常致命,比較致命的緩存雪崩,是緩存服務(wù)器某個(gè)節(jié)點(diǎn)宕機(jī)或斷網(wǎng)。因?yàn)樽匀恍纬傻木彺嫜┍?,一定是在某個(gè)時(shí)間段集中創(chuàng)建緩存,那么那個(gè)時(shí)候數(shù)據(jù)庫能頂住壓力,這個(gè)時(shí)候,數(shù)據(jù)庫也是可以頂住壓力的。無非就是對(duì)數(shù)據(jù)庫產(chǎn)生周期性的壓力而已。而緩存服務(wù)節(jié)點(diǎn)的宕機(jī),對(duì)數(shù)據(jù)庫服務(wù)器造成的壓力是不可預(yù)知的,很有可能瞬間就把數(shù)據(jù)庫壓垮。
緩存擊穿
緩存擊穿,是指一個(gè)key非常熱點(diǎn),在不停的扛著大并發(fā),大并發(fā)集中對(duì)這一個(gè)點(diǎn)進(jìn)行訪問,當(dāng)這個(gè)key在失效的瞬間,持續(xù)的大并發(fā)就穿破緩存,直接請(qǐng)求數(shù)據(jù)庫,就像在一個(gè)屏障上鑿開了一個(gè)洞。
小編在做電商項(xiàng)目的時(shí)候,把這貨就成為“爆款”。
其實(shí),大多數(shù)情況下這種爆款很難對(duì)數(shù)據(jù)庫服務(wù)器造成壓垮性的壓力。達(dá)到這個(gè)級(jí)別的公司沒有幾家的。所以,務(wù)實(shí)主義的小編,對(duì)主打商品都是早早的做好了準(zhǔn)備,讓緩存永不過期。即便某些商品自己發(fā)酵成了爆款,也是直接設(shè)為永不過期就好了。
大道至簡,mutex key互斥鎖真心用不上。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“redis中緩存雪崩、緩存擊穿、緩存穿透指的是什么意思”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!