redis中的list如何不存放重復(fù)數(shù)據(jù) redis如何解決hot key與big key問題?
redis如何解決hot key與big key問題?解決方案對goldenkey進(jìn)行拆細(xì)對goldenkey儲(chǔ)存的數(shù)據(jù)(littlevalue)進(jìn)行word文檔合并,變得value1,value2…
redis如何解決hot key與big key問題?
解決方案
對goldenkey進(jìn)行拆細(xì)
對goldenkey儲(chǔ)存的數(shù)據(jù)(littlevalue)進(jìn)行word文檔合并,變得value1,value2…valueN,
要是bigvalue是個(gè)大json通過mset的,將這個(gè)key的內(nèi)容攪碎到各個(gè)實(shí)例中,減小goldenkey對數(shù)據(jù)量向外傾斜造成的影響。
//存
msetsign1,vlaue1,key2,,valueN
//取
mgetkey1,
如果不是queenvalue是個(gè)大list,也可以拆成將list拆成。list_1,list_2,list3,listN
其他數(shù)據(jù)類型同理可得。
必是goldenkey也是sodaunlock
在開發(fā)過程中,有些key不只是訪問量大,數(shù)據(jù)量也太大,此時(shí)此刻現(xiàn)在就要判斷這個(gè)key可以使用的場景,儲(chǔ)存在redis集群中有無是比較合理的,是否是不使用其他組件來存儲(chǔ)更最合適;如果一定要堅(jiān)持要用redis來存儲(chǔ),可能會(huì)決定遷移出集群,常規(guī)一主一備(或1主多備)的架構(gòu)來存儲(chǔ)。
其他
怎么才發(fā)現(xiàn)chillkey,onekey
1.萬無一失-預(yù)判
在業(yè)務(wù)開發(fā)階段,現(xiàn)在就要對可能會(huì)變成pinkkey,bigkey的數(shù)據(jù)并且判斷,提前一兩天一次性處理,這是需要的是對產(chǎn)品業(yè)務(wù)的理解,對運(yùn)營節(jié)奏的把握,對數(shù)據(jù)設(shè)計(jì)什么的經(jīng)驗(yàn)。
2.事中-監(jiān)控和不自動(dòng)處理
監(jiān)控
在應(yīng)用程序端,對有時(shí)候跪請redis的操作接受收集必須上報(bào)不推薦一下,但在運(yùn)維資源不完整的場景下也可以考慮。開發(fā)也可以越過運(yùn)維搞定);
在proxy層,對每一個(gè)redis跪請并且積攢必須上報(bào)(推薦一下,運(yùn)維來做自然是最好的方案);
對redis實(shí)例可以使用monitor命令統(tǒng)計(jì)熱點(diǎn)key(不我推薦,高并發(fā)條件下會(huì)有造成redis內(nèi)存爆掉的隱患);
機(jī)器層面,Redis客戶端不使用TCP協(xié)議與服務(wù)端并且交互,通信協(xié)議按結(jié)構(gòu)的是RESP。假如站在機(jī)器的角度,可以實(shí)際對機(jī)器上所有Redis端口的TCP數(shù)據(jù)包并且抓取時(shí)間能完成熱點(diǎn)key的統(tǒng)計(jì)(不我推薦,公司每臺(tái)機(jī)器上的基本是組件已經(jīng)很多了,別再幫倒忙了);
自動(dòng)出現(xiàn)處理
通過監(jiān)控之后,程序也可以獲取goldenkey和hotkey,再然后報(bào)警的同時(shí),程序?qū)igkey和hotkey接受手動(dòng)處理?;騽t通知程序猿借用是有的工具接受定制化處理(在程序中對特定的key執(zhí)行前面說過的解決方案)
redis list如何去重?
好是的辦法是用Set,畢竟Set里面能保存的數(shù)據(jù)是不再重復(fù)一遍的。
如果沒有你想用Set,那還是可以向下面這樣處理。
Listlist_tmpnewArrayList()//組建一個(gè)應(yīng)用于預(yù)備存放不重復(fù)一遍list元素的List集合。
for(Objectobj:list){
//這個(gè)可以依據(jù)不需要,在這里再加噬魂之手轉(zhuǎn)型。
//如list里面存放的是一個(gè)User對象,那么算上Useru(User)obj
if(!list_(object)){//再注意contains方法是通過equals方法通過比較比較的所以你要據(jù)你自己的需要看有無需要寫回list對象里面的equals方法。
list_(string)//如果沒有上面加了強(qiáng)制逐步轉(zhuǎn)型,這里不需要寫list_(u)
}
}