1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        看完后,我才明白Redis為什么默認(rèn)16個(gè)數(shù)據(jù)庫?

        共 1629字,需瀏覽 4分鐘

         ·

        2020-11-04 10:31

        www.toutiao.com/a6752317753866060299


        導(dǎo)讀:在實(shí)際項(xiàng)目中Redis常被應(yīng)用于做緩存,分布式鎖、消息隊(duì)列等。但是在搭建配置好Redis服務(wù)器后很多朋友應(yīng)該會發(fā)現(xiàn)和有這樣的疑問,為什么Redis默認(rèn)建立了16個(gè)數(shù)據(jù)庫,如下圖所示。

        一、16個(gè)數(shù)據(jù)庫的由來
        Redis是一個(gè)字典結(jié)構(gòu)的存儲服務(wù)器,一個(gè)Redis實(shí)例提供了多個(gè)用來存儲數(shù)據(jù)的字典,客戶端可以指定將數(shù)據(jù)存儲在哪個(gè)字典中。這與在一個(gè)關(guān)系數(shù)據(jù)庫實(shí)例中可以創(chuàng)建多個(gè)數(shù)據(jù)庫類似(如下圖所示),所以可以將其中的每個(gè)字典都理解成一個(gè)獨(dú)立的數(shù)據(jù)庫。

        以MySQL實(shí)例為例
        Redis默認(rèn)支持16個(gè)數(shù)據(jù)庫,可以通過調(diào)整Redis的配置文件redis/redis.conf中的databases來修改這一個(gè)值,設(shè)置完畢后重啟Redis便完成配置。

        客戶端與Redis建立連接后會默認(rèn)選擇0號數(shù)據(jù)庫,不過可以隨時(shí)使用SELECT命令更換數(shù)據(jù)庫。
        在實(shí)際項(xiàng)目中則可以通過以Redis配置文件的形式指定數(shù)據(jù)庫,如下圖所示

        二、正確理解Redis的“數(shù)據(jù)庫”概念

        由于Redis不支持自定義數(shù)據(jù)庫的名字,所以每個(gè)數(shù)據(jù)庫都以編號命名。開發(fā)者則需要自己記錄存儲的數(shù)據(jù)與數(shù)據(jù)庫的對應(yīng)關(guān)系。另外Redis也不支持為每個(gè)數(shù)據(jù)庫設(shè)置不同的訪問密碼,所以一個(gè)客戶端要么可以訪問全部數(shù)據(jù)庫,要么全部數(shù)據(jù)庫都沒有權(quán)限訪問。但是,要正確地理解Redis的“數(shù)據(jù)庫”概念這里不得不提到一個(gè)命令:

        該命令可以清空實(shí)例下的所有數(shù)據(jù)庫數(shù)據(jù),這與我們所熟知的關(guān)系型數(shù)據(jù)庫所不同。關(guān)系型數(shù)據(jù)庫多個(gè)庫常用于存儲不同應(yīng)用程序的數(shù)據(jù) ,且沒有方式可以同時(shí)清空實(shí)例下的所有庫數(shù)據(jù)。所以對于Redis來說這些db更像是一種命名空間,且不適宜存儲不同應(yīng)用程序的數(shù)據(jù)。比如可以使用0號數(shù)據(jù)庫存儲某個(gè)應(yīng)用生產(chǎn)環(huán)境中的數(shù)據(jù),使用1號數(shù)據(jù)庫存儲測試環(huán)境中的數(shù)據(jù),但不適宜使用0號數(shù)據(jù)庫存儲A應(yīng)用的數(shù)據(jù)而使用1號數(shù)據(jù)庫B應(yīng)用的數(shù)據(jù),不同的應(yīng)用應(yīng)該使用不同的Redis實(shí)例存儲數(shù)據(jù)。Redis非常輕量級,一個(gè)空Redis實(shí)例占用的內(nèi)在只有1M左右,所以不用擔(dān)心多個(gè)Redis實(shí)例會額外占用很多內(nèi)存。
        三、集群情況下是否支持一個(gè)實(shí)例多個(gè)db?

        要注意以上所說的都是基于單體Redis的情況。而在集群的情況下不支持使用select命令來切換db,因?yàn)镽edis集群模式下只有一個(gè)db0。再擴(kuò)展一些集群與單機(jī)Reids的區(qū)別,感興趣的朋友可以去查閱相關(guān)的資料深入理解,這里就不做討論了。
        • key批量操作支持有限:例如mget、mset必須在一個(gè)slot
        • Key事務(wù)和Lua支持有限:操作的key必須在一個(gè)節(jié)點(diǎn)
        • key是數(shù)據(jù)分區(qū)的最小粒度:不支持bigkey分區(qū)
        • 不支持多個(gè)數(shù)據(jù)庫:集群模式下只有一個(gè)db0
        • 復(fù)制只支持一層:不支持樹形復(fù)制結(jié)構(gòu)

        四、總結(jié)
        Redis實(shí)例默認(rèn)建立了16個(gè)db,由于不支持自主進(jìn)行數(shù)據(jù)庫命名所以以dbX的方式命名。默認(rèn)數(shù)據(jù)庫數(shù)量可以修改配置文件的database值來設(shè)定。對于db正確的理解應(yīng)為“命名空間”,多個(gè)應(yīng)用程序不應(yīng)使用同一個(gè)Redis不同庫,而應(yīng)一個(gè)應(yīng)用程序?qū)?yīng)一個(gè)Redis實(shí)例,不同的數(shù)據(jù)庫可用于存儲不同環(huán)境的數(shù)據(jù)。最后要注意,Redis集群下只有db0,不支持多db。

        推薦閱讀


        代碼對比工具,我就用這6個(gè)

        分享我常用的5個(gè)免費(fèi)的在線 SQL 數(shù)據(jù)庫環(huán)境,簡直太方便了!

        Spring Boot 三招組合拳,手把手教你打出優(yōu)雅的后端接口

        MySQL 5.7 vs 8.0,你選那個(gè)?網(wǎng)友:我繼續(xù)原地踏步~


        最后,推薦給大家一個(gè)有趣有料的公眾號:寫代碼的渣渣鵬,7年老程序員教你寫bug,回復(fù)”面試“有驚喜哦

        掃碼關(guān)注


        瀏覽 18
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美狂猛专区 | 北条麻妃人妻中文字幕91影视 | 娇妻被粗大的上司征服 | 国产三级乡下 | 国产在线链接 | 岳把我用嘴含进满足我广告 | 在线观看午夜福利 | 日韩免费无码 | 与子敌伦刺激对白播放免费 | 俺去也俺就去www色情网最新更新内容 |