什么是熱點(diǎn)key?
對于web應(yīng)用來說,用戶消費(fèi)的數(shù)據(jù)遠(yuǎn)遠(yuǎn)大于生產(chǎn)的數(shù)據(jù),大多人使用都只是進(jìn)行瀏覽,少數(shù)的人才會(huì)進(jìn)行評論。對于web服務(wù)來說,某些熱門的內(nèi)容,讀請求的量級可能是非常大的,數(shù)據(jù)庫無法支持這么高并發(fā)的請求,基本都會(huì)使用Redis集群做緩存,但是如果如果熱點(diǎn)數(shù)據(jù)的請求量過大,導(dǎo)致熱點(diǎn)key所在Redis節(jié)點(diǎn)無法支撐,這種情況就需要采用額外的措施解決。當(dāng)然Redis的性能還是非常好的,大多數(shù)業(yè)務(wù)量級都可以撐住,除非業(yè)務(wù)體量很大。
解決方案
服務(wù)端緩存
這種方式就是將熱點(diǎn)數(shù)據(jù)同時(shí)緩存在服務(wù)器的內(nèi)存中,增加一級緩存,如果數(shù)據(jù)在內(nèi)存緩存中,就直接讀,不用去請求Redis。如果數(shù)據(jù)沒有再請求Redis,獲取到數(shù)據(jù)再寫入內(nèi)存緩存中。這樣就大大減少了Redis的壓力,而且直接讀內(nèi)存的速度會(huì)更快。
備份熱點(diǎn)key
為了不讓熱點(diǎn)key只請求到某一個(gè)redis節(jié)點(diǎn),可以在熱點(diǎn)key后面加一個(gè)隨機(jī)數(shù),這樣熱點(diǎn)數(shù)據(jù)可能就hash到不同的槽位,從而請求到不同的Redis節(jié)點(diǎn),相當(dāng)于一個(gè)key有了多個(gè)不同的備份,分散在多個(gè)Redis節(jié)點(diǎn)上。