久久午夜无码,国产中文资源,Chinese熟女熟妇2乱2,高清五码d一区

當(dāng)前位置:首頁(yè) > 前端設(shè)計(jì) > 正文

redis雪崩和穿透,redis雪崩怎么解決

redis雪崩和穿透,redis雪崩怎么解決

各位老鐵們,大家好,今天由我來(lái)為大家分享redis雪崩和穿透,以及redis雪崩怎么解決的相關(guān)問(wèn)題知識(shí),希望對(duì)大家有所幫助。如果可以幫助到大家,還望關(guān)注收藏下本站,您的...

各位老鐵們,大家好,今天由我來(lái)為大家分享redis雪崩和穿透,以及redis雪崩怎么解決的相關(guān)問(wèn)題知識(shí),希望對(duì)大家有所幫助。如果可以幫助到大家,還望關(guān)注收藏下本站,您的支持是我們最大的動(dòng)力,謝謝大家了哈,下面我們開(kāi)始吧!

海量數(shù)據(jù)下如何正確訪問(wèn)Redis服務(wù)才不會(huì)掛掉

要保證Redis不會(huì)掛掉,也就是提高Redis的高可用性,可以從這么幾個(gè)方面考慮。

集群式部署方式

Redis單副本:也就是只部署一臺(tái)Redis,不需要節(jié)點(diǎn)之間的數(shù)據(jù)同步,架構(gòu)簡(jiǎn)單,部署方便;但是單臺(tái)機(jī)器畢竟是有風(fēng)險(xiǎn)的,按照題目中【海量數(shù)據(jù)】的場(chǎng)景,是不能達(dá)到高可用要求的。

Redis主從:主從實(shí)例可以部署在不同的物理服務(wù)器上,充分利用多臺(tái)服務(wù)器的資源,在主庫(kù)發(fā)生故障的時(shí)候,可以進(jìn)行主備切換,從而保證系統(tǒng)的穩(wěn)定運(yùn)行,甚至可以做到讀寫(xiě)分離,主庫(kù)專門用作寫(xiě)操作,一臺(tái)或多臺(tái)備庫(kù)進(jìn)行讀操作;但是當(dāng)主庫(kù)發(fā)生故障的時(shí)候(如果沒(méi)有HA方案的話),是需要手動(dòng)進(jìn)行主備切換的。

RedisSentinel:部署架構(gòu)分為兩部分【Sentinel集群】和【數(shù)據(jù)集群】;Sentinel集群是由多個(gè)Sentinel節(jié)點(diǎn)組成的分布式集群,通常是2N+1臺(tái)服務(wù)器,可以實(shí)現(xiàn)故障發(fā)現(xiàn)和轉(zhuǎn)移、客戶端通知等功能;數(shù)據(jù)集群用于存儲(chǔ)數(shù)據(jù);它能夠解決主從模式下的自動(dòng)切換問(wèn)題,并且數(shù)據(jù)集群是可以橫向擴(kuò)展的;當(dāng)然這個(gè)架構(gòu)實(shí)現(xiàn)和部署起來(lái),也更為復(fù)雜一些;并且這個(gè)架構(gòu)不能做到讀寫(xiě)分離。

RedisCluster:Redis3.0集群,是分布式集群解決方案之一,物理架構(gòu)中配置2N個(gè)節(jié)點(diǎn)(主從一一對(duì)應(yīng)),主節(jié)點(diǎn)提供讀寫(xiě)操作,從節(jié)點(diǎn)作為備份;數(shù)據(jù)分布保存在多個(gè)節(jié)點(diǎn)上,是一種無(wú)中心的架構(gòu),如果有部分節(jié)點(diǎn)發(fā)生故障,能夠?qū)崿F(xiàn)故障自動(dòng)轉(zhuǎn)移和切換,用投票機(jī)制完成備庫(kù)升級(jí)為主庫(kù)(下文的Redis分片章節(jié),還會(huì)介紹到RedisCluster)。

Redis分片

Redis在3.0之前只支持單實(shí)例,在此之前,在數(shù)據(jù)量比較大的情況,通常有幾種方案可以做到把數(shù)據(jù)分片保存到多臺(tái)服務(wù)器上。

客戶端分片:分片邏輯被放到了客戶端上,由客戶端根據(jù)路由規(guī)則,把數(shù)據(jù)保存不同的Redis實(shí)例中,讀取的時(shí)候也是根據(jù)規(guī)則,去對(duì)應(yīng)的實(shí)例上讀取數(shù)據(jù);但是當(dāng)Redis實(shí)例數(shù)量發(fā)生變化的時(shí)候(增加實(shí)例或減少實(shí)例),需要手動(dòng)地調(diào)整分片的規(guī)則程序;并且這種部署方式,也增加了運(yùn)維的成本。

Redis代理組件:在這種架構(gòu)中,客戶端不再直接訪問(wèn)Redis實(shí)例,而是訪問(wèn)代理組件,由它管理路由的規(guī)則;客戶端不需要關(guān)心有幾個(gè)Redis實(shí)例,數(shù)據(jù)被路由到哪個(gè)實(shí)例上;但是由于在客戶端和Redis之間增加了一層代理,多多少少也會(huì)產(chǎn)生一些性能上的損耗。

RedisCluster:上文中提到的Redis3.0集群,這里對(duì)數(shù)據(jù)的存儲(chǔ)和路由方式,再介紹幾句:Redis把所有的Key分成了16384個(gè)slot,每個(gè)Redis實(shí)例負(fù)責(zé)其中一部分slot;每個(gè)Redis都知道每個(gè)slot在哪個(gè)節(jié)點(diǎn)上存儲(chǔ)(實(shí)例節(jié)點(diǎn)定期做數(shù)據(jù)交換);當(dāng)客戶端訪問(wèn)到一個(gè)Redis實(shí)例的時(shí)候,如果數(shù)據(jù)不在這個(gè)實(shí)例上,那么會(huì)通過(guò)重定向命令引導(dǎo)客戶端訪問(wèn)數(shù)據(jù)所在的實(shí)例。

熱點(diǎn)數(shù)據(jù)挑戰(zhàn)單節(jié)點(diǎn)的極限

雖然我們已經(jīng)把數(shù)據(jù)分散保存到多臺(tái)Redis實(shí)例上了,但是如果有一個(gè)熱點(diǎn)數(shù)據(jù)被頻繁訪問(wèn),超過(guò)了單實(shí)例的服務(wù)器極限,那么該如何解決呢?通常的手段就是做讀寫(xiě)分離,部署多臺(tái)只讀節(jié)點(diǎn),對(duì)外提供服務(wù)。

我將持續(xù)分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,希望能得到你的關(guān)注。

如何解決Redis緩存雪崩、緩存穿透、緩存并發(fā)等問(wèn)題

緩存穿透

很多項(xiàng)目在使用Redis或其他緩存框架的時(shí)候,都是先查詢緩存,查詢不的話再查詢數(shù)據(jù)庫(kù),查到之后再放到內(nèi)存中;如果一個(gè)key值本身就不存在,那么每一次都會(huì)查詢數(shù)據(jù)庫(kù),也就是常說(shuō)的【緩存穿透】。

應(yīng)對(duì)方法:

如果在Redis中查詢不到,并且查詢數(shù)據(jù)庫(kù)也沒(méi)有結(jié)果,那么就將這個(gè)key寫(xiě)入到Redis中,value=空,并設(shè)置一個(gè)超時(shí)過(guò)期時(shí)間,例如五分鐘,那么五分鐘以內(nèi)的對(duì)這個(gè)可以的所有查詢就可以攔截下來(lái),如果數(shù)據(jù)庫(kù)有key對(duì)應(yīng)的數(shù)據(jù)了,那么五分鐘后Redis中的緩存過(guò)期,會(huì)訪問(wèn)數(shù)據(jù)庫(kù)并加載緩存;但是如果被惡意攻擊,每次請(qǐng)求的key都不相同且不存在,那么依然會(huì)穿透到數(shù)據(jù)庫(kù);

布隆過(guò)濾器:將可能存在的數(shù)據(jù)Hash到一個(gè)足夠大的bitmap上,它可以告訴你“某個(gè)key一定不存在或者可能存在”,一個(gè)一定不存在的數(shù)據(jù)會(huì)被bitmap攔截。

緩存雪崩

很多時(shí)候,Redis中的緩存是要設(shè)置過(guò)期時(shí)間的,假如Redis中的數(shù)據(jù),過(guò)期時(shí)間都設(shè)置成一樣的,那么到了時(shí)間之后,全部緩存過(guò)期失效,下一秒所有的請(qǐng)求都會(huì)訪問(wèn)數(shù)據(jù)庫(kù),那么數(shù)據(jù)庫(kù)可能因?yàn)樵L問(wèn)量多大導(dǎo)致“崩潰”,這就是緩存雪崩。

應(yīng)對(duì)方法:

最暴力的解決辦法,緩存不設(shè)置自動(dòng)過(guò)期時(shí)間,只要緩存不崩,數(shù)據(jù)庫(kù)就不會(huì)崩。

另外一個(gè)辦法,就是讓緩存過(guò)期時(shí)間不那么一致,比如一批緩存數(shù)據(jù)24小時(shí)后過(guò)期,那么就在這個(gè)基礎(chǔ)上,每條緩存的過(guò)期時(shí)間前后隨機(jī)1-6000秒(1-10分鐘)。

緩存并發(fā)

大多數(shù)時(shí)候,我們的程序訪問(wèn)Redis都不可能是單線程,那么當(dāng)多個(gè)Client并發(fā)對(duì)Redis進(jìn)行setkey操作的時(shí)候,可能會(huì)產(chǎn)生一些問(wèn)題;其實(shí)Redis本身是單線程的,這種時(shí)候會(huì)按照先后順序進(jìn)行操作;或者把操作放在隊(duì)列中,按順序執(zhí)行;

但比如這種情況:

token過(guò)期,有兩個(gè)線程都去重新獲取token;

線程1獲取token1;

線程2獲取到token2,此時(shí)token1過(guò)期;

線程1把token1放到Redis,再拿著token1去調(diào)用服務(wù),發(fā)現(xiàn)過(guò)期了,繼續(xù)去請(qǐng)求token3,此時(shí)token2過(guò)期;

線程2把token2放到Redis,再拿著token2去調(diào)用服務(wù),發(fā)現(xiàn)過(guò)期了,繼續(xù)去請(qǐng)求token4,此時(shí)token3過(guò)期;

......

這就需要我們?cè)诟戮彺娴臅r(shí)候,做一些控制了。

我將持續(xù)分享Java開(kāi)發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的見(jiàn)解,希望能得到你的關(guān)注。

好了,文章到這里就結(jié)束啦,如果本次分享的redis雪崩和穿透和redis雪崩怎么解決問(wèn)題對(duì)您有所幫助,還望關(guān)注下本站哦!

亚洲综合一区欧美激情| 一本一道人妻少妇AV| 国产在线精品一区二区在线看| 国产一区二区精品久久呦18| 精品国模一区二区三区欧美| 三上悠亚一区在线| 91原创视频在线| 午夜男女精品| 不卡av日韩一区二区在线观看| 国产一区二区美女白浆| 色妞色视频一区二区三区四区 | 97色天使视频| 日本在线黄视频| 精品免费视频二区| 熟女三批91| 亚洲av无码乱码国产精品1| 91精品久久久久久无码人妻 | 美女日比的全红的| 日韩二区综合| 日韩精品在线视频| 日韩精品无码一区二区三区视频| 无码免费的亚洲视频| 欧美日韩 爱| 最新亚洲人无码无线在线| 中文字幕不卡在线无码| 无码国产伦精品一区二| 麻豆精品一区二区三区综合av| 国产一级毛片不卡中文字幕| 久久婷婷五月综合色丁香| 成人综合 网站| 少妇人妻上班偷人精品| 成人免费一级电影| av直接观看| 日本一区精品国产| 亚洲免费性| 久久久久国色a∨免费看| 美日韩精品| 日韩午夜无码A级毛片免费| 日本黄www| 草草影院在线| 色AV综合AV综合无码网站|