為什么要使用redis的多數(shù)據(jù)庫(kù),相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)建站專(zhuān)業(yè)為企業(yè)提供確山網(wǎng)站建設(shè)、確山做網(wǎng)站、確山網(wǎng)站設(shè)計(jì)、確山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、確山企業(yè)網(wǎng)站模板建站服務(wù),十年確山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
為什么要使用redis
的多數(shù)據(jù)庫(kù),我們項(xiàng)目中就這么用了,這點(diǎn)我也想不明白。如果是要做業(yè)務(wù)隔離,那么可以給不同業(yè)務(wù)的緩存key
添加一個(gè)前綴,如果因此導(dǎo)致key
過(guò)長(zhǎng),可以把一個(gè)大的redis
集群拆分為對(duì)應(yīng)多個(gè)業(yè)務(wù)的集群。不管分多少個(gè)庫(kù),集群總的內(nèi)存大小是不變的,所能存儲(chǔ)的數(shù)據(jù)也是一樣多的,為何不把一個(gè)大的集群拆分給每個(gè)業(yè)務(wù)使用呢?
既然要做業(yè)務(wù)隔離,將一個(gè)大的redis
集群拆分給不同業(yè)務(wù)使用,根據(jù)不同業(yè)務(wù)對(duì)緩存大小的要求以及并發(fā)訪問(wèn)量拆分,這樣不是能更好的做到業(yè)務(wù)上的隔離嗎。用不同數(shù)據(jù)庫(kù)隔離也沒(méi)有多大毛病,但如果各服務(wù)不是按業(yè)務(wù)拆分的情況下,這種方式會(huì)導(dǎo)致項(xiàng)目中每操作一次redis
都需要切換數(shù)據(jù)庫(kù),對(duì)服務(wù)來(lái)說(shuō),平白無(wú)辜添加了一次網(wǎng)絡(luò)I/O
,降低緩存讀寫(xiě)的性能,并發(fā)量越大所展現(xiàn)出來(lái)的毛病就越多,這與高并發(fā)性能調(diào)優(yōu)背道而馳。
在java
項(xiàng)目中,除了jedis
會(huì)支持動(dòng)態(tài)切換數(shù)據(jù)庫(kù)之外,使用其它框架要么通過(guò)動(dòng)態(tài)修改連接池的配置,要么就是為每個(gè)庫(kù)配置一個(gè)連接池來(lái)實(shí)現(xiàn),而這些都會(huì)影響到性能,因此jedis
成了最優(yōu)的選擇。為什么這些框架都不支持動(dòng)態(tài)切換庫(kù),因?yàn)闆](méi)有人會(huì)這么使用,顯然動(dòng)態(tài)切換庫(kù)是不推薦的。
我在Google
網(wǎng)上論壇的Redis DB
論壇上看到這么一篇帖子,鏈接:https://groups.google.com/forum/?spm=a2c4e.11153987.0.0.1d6e4e37polahb#!forum/redis-db
。
圖為redis
作者antirez
在tim lossen
發(fā)表的一個(gè)帖子database names?
中的回復(fù),tim lossen
在帖子中提問(wèn),為什么redis
的多數(shù)據(jù)庫(kù)不支持使用名稱(chēng),而只能使用數(shù)字?正如你在圖中所看到的,redis
作者antirez
的回復(fù)大致意思是:Redis
多數(shù)據(jù)庫(kù)是我在Redis
設(shè)計(jì)中最糟糕的決定,我希望在某種程度上,我們可以放棄多個(gè)數(shù)據(jù)庫(kù)的支持,但我認(rèn)為可能已經(jīng)太晚了,因?yàn)橛泻芏嗳嗽诠ぷ髦惺褂眠@個(gè)特性。
在以往的redis
文章中,我也提到過(guò),使用jedis
配置連接池時(shí),建議把每次從連接池中獲取一個(gè)連接時(shí)都向服務(wù)端發(fā)送一個(gè)ping
命令檢測(cè)連接是否可用的配置關(guān)掉,因?yàn)楦卟l(fā)場(chǎng)景下,該操作會(huì)導(dǎo)致服務(wù)頻繁的向redis
服務(wù)端發(fā)送ping
命令,也會(huì)導(dǎo)致服務(wù)自身相當(dāng)于多了一次get
請(qǐng)求的耗時(shí),因?yàn)榫W(wǎng)絡(luò)I/O
。
項(xiàng)目不是按業(yè)務(wù)拆分導(dǎo)致各項(xiàng)目之間耦合嚴(yán)重,多個(gè)數(shù)據(jù)庫(kù)的使用更是增加了項(xiàng)目的維護(hù)難度,增加了各小組之間的溝通成本,而“key
是什么,在哪個(gè)庫(kù)?”也成了我們溝通的常用語(yǔ)。當(dāng)你想修改某個(gè)key
時(shí),你需要詢問(wèn)各小組的意見(jiàn),各個(gè)項(xiàng)目都得修改,而當(dāng)你想添加一個(gè)key
時(shí),你需要詢問(wèn)各個(gè)小組,這個(gè)key
有沒(méi)有使用,避免覆蓋別人的key
,當(dāng)然,這也是系統(tǒng)架構(gòu)層面最大的錯(cuò)誤。而拋開(kāi)系統(tǒng)架構(gòu)問(wèn)題,顯然無(wú)論通過(guò)加key
前綴,還是使用多個(gè)集群,都比使用不同庫(kù)隔離業(yè)務(wù)的方案更合適。
看完上述內(nèi)容,你們掌握為什么要使用Redis的多數(shù)據(jù)庫(kù)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!