生產(chǎn)環(huán)境Redis中的熱點(diǎn)key如何發(fā)現(xiàn)并優(yōu)化?
Redis作為高性能的非關(guān)系數(shù)據(jù)庫(kù),在目前主流的網(wǎng)站都是非常廣泛的應(yīng)用。讀寫(xiě)效率可達(dá)8-10w/s。一般作為緩存數(shù)據(jù)庫(kù),都是載入網(wǎng)站的一些熱點(diǎn)性質(zhì)額數(shù)據(jù),而不是把緩存當(dāng)做數(shù)據(jù)庫(kù)來(lái)使用。
只有找到的是網(wǎng)站中的熱點(diǎn)數(shù)據(jù),才能夠把Redis的性能發(fā)揮到極致,一般查找緩存的熱點(diǎn)的key,常用的方式分為客戶端的和我們服務(wù)的兩大類(lèi)。
客戶端1、客戶端其實(shí)是距離key”最近”的地方,因?yàn)椴僮鞯腞edis的命令就是客戶端發(fā)出的。例如客戶端設(shè)發(fā)送操作key命令的時(shí)候,把調(diào)用的key和調(diào)用的次數(shù)記錄到日志里面進(jìn)行統(tǒng)計(jì),然后再服務(wù)端進(jìn)行日志分析的統(tǒng)計(jì),得到熱點(diǎn)的key值,這樣就在Redis緩存key的時(shí)候就可用統(tǒng)計(jì)出來(lái)的熱點(diǎn)數(shù)據(jù)來(lái)操作。
2、憑借經(jīng)驗(yàn),進(jìn)行預(yù)估,每一個(gè)網(wǎng)站在開(kāi)始運(yùn)行的時(shí)候都會(huì)存在熱點(diǎn)場(chǎng)景,或者說(shuō)訪問(wèn)的頻率在非常高場(chǎng)景下,比如說(shuō)像微博的熱搜榜、商城里面活動(dòng)促銷(xiāo)商品,那這些就是我們可以提前將Key作為熱點(diǎn)Key進(jìn)行存儲(chǔ)
3、采用抓包工具進(jìn)行評(píng)估:Redis使用TCP協(xié)議與客戶端進(jìn)行通信,存在網(wǎng)絡(luò)上面的通信,這時(shí)候就可以基于抓包工具去分析網(wǎng)絡(luò)所攜帶的key的數(shù)據(jù),然后做好訪問(wèn)key頻率統(tǒng)計(jì)。通信協(xié)議采用的是RESP。
例如:tcpdump、Wireshark等工具
注:RESP(REdis Serialization Protocol, redis序列化協(xié)議)協(xié)議與Redis服務(wù)器交互。RESP是序列化數(shù)據(jù)之后,在建立在TCP通道上進(jìn)行傳輸服務(wù)端1、使用monitor命令統(tǒng)計(jì)熱點(diǎn)key可以記錄redis的所有操作命令,記錄并分析monitor日志得到key的訪問(wèn)頻率。(monitor可能會(huì)造成性能問(wèn)題,所以要選擇好時(shí)機(jī))
2、采用第三方開(kāi)源項(xiàng)目,如facebook開(kāi)源項(xiàng)目redis-faina,獲取最近操作命令的熱點(diǎn)key、熱點(diǎn)命令、耗時(shí)分布等數(shù)據(jù)。為了減少網(wǎng)絡(luò)開(kāi)銷(xiāo)以及加快輸出緩沖區(qū)的消費(fèi)速度,monitor要盡可能在本機(jī)執(zhí)行。
如果有幫助,歡迎關(guān)注額