Redis16個數據庫都是什麼?

在實際項目中Redis常被應用於作緩存,分佈式鎖、消息隊列等。可是在搭建配置好Redis服務器後不少朋友應該會發現和有這樣的疑問,爲何Redis默認創建了16個數據庫?

在實際項目中Redis常被應用於作緩存,分佈式鎖、消息隊列等。可是在搭建配置好Redis服務器後不少朋友應該會發現和有這樣的疑問,爲何Redis默認創建了16個數據庫,以下圖所示。html

Redis16個數據庫都是什麼?Redis16個數據庫都是什麼?

1、16個數據庫的由來mysql

Redis是一個字典結構的存儲服務器,一個Redis實例提供了多個用來存儲數據的字典,客戶端能夠指定將數據存儲在哪一個字典中。這與在一個關係數據庫實例中能夠建立多個數據庫相似(以下圖所示),因此能夠將其中的每一個字典都理解成一個獨立的數據庫。linux

Redis16個數據庫都是什麼?Redis16個數據庫都是什麼?

以MySQL實例爲例redis

Redis默認支持16個數據庫,能夠經過調整Redis的配置文件redis/redis.conf中的databases來修改這一個值,設置完畢後重啓Redis便完成配置。sql

Redis16個數據庫都是什麼?Redis16個數據庫都是什麼?

客戶端與Redis創建鏈接後會默認選擇0號數據庫,不過能夠隨時使用SELECT命令更換數據庫。數據庫

# 切庫 
redis> SELECT 1 # 默認0號db,切換爲1號db 
OK 
redis [1] > GET username # 從1號庫中獲取 username  
(nil)

在實際項目中則能夠經過以Redis配置文件的形式指定數據庫,以下圖所示緩存

Redis16個數據庫都是什麼?Redis16個數據庫都是什麼?

2、正確理解Redis的「數據庫」概念服務器

Redis16個數據庫都是什麼?Redis16個數據庫都是什麼?

因爲Redis不支持自定義數據庫的名字,因此每一個數據庫都以編號命名。開發者則須要本身記錄存儲的數據與數據庫的對應關係。另外Redis也不支持爲每一個數據庫設置不一樣的訪問密碼,因此一個客戶端要麼能夠訪問所有數據庫,要麼所有數據庫都沒有權限訪問。可是,要正確地理解Redis的「數據庫」概念這裏不得不提到一個命令分佈式

# 清空一個Redis實例中全部數據庫中的數據 
redis 127.0.0.1:6379> FLUSHALL

該命令能夠清空實例下的全部數據庫數據,這與咱們所熟知的關係型數據庫所不一樣。關係型數據庫多個庫經常使用於存儲不一樣應用程序的數據 ,且沒有方式能夠同時清空實例下的全部庫數據。因此對於Redis來講這些db更像是一種命名空間,且不適宜存儲不一樣應用程序的數據。好比可使用0號數據庫存儲某個應用生產環境中的數據,使用1號數據庫存儲測試環境中的數據,但不適宜使用0號數據庫存儲A應用的數據而使用1號數據庫B應用的數據,不一樣的應用應該使用不一樣的Redis實例存儲數據。Redis很是輕量級,一個空Redis實例佔用的內在只有1M左右,因此不用擔憂多個Redis實例會額外佔用不少內存。測試

3、集羣狀況下是否支持一個實例多個db?

Redis16個數據庫都是什麼?Redis16個數據庫都是什麼?

要注意以上所說的都是基於單體Redis的狀況。而在集羣的狀況下不支持使用select命令來切換db,由於Redis集羣模式下只有一個db0。再擴展一些集羣與單機Reids的區別,感興趣的朋友能夠去查閱相關的資料深刻理解,這裏就不作討論了。

  • key批量操做支持有限:例如mget、mset必須在一個slot
  • Key事務和Lua支持有限:操做的key必須在一個節點
  • key是數據分區的最小粒度:不支持bigkey分區
  • 不支持多個數據庫:集羣模式下只有一個db0
  • 複製只支持一層:不支持樹形複製結構

Redis16個數據庫都是什麼?Redis16個數據庫都是什麼?

4、總結

Redis實例默認創建了16個db,因爲不支持自主進行數據庫命名因此以dbX的方式命名。默認數據庫數量能夠修改配置文件的database值來設定。對於db正確的理解應爲「命名空間」,多個應用程序不該使用同一個Redis不一樣庫,而應一個應用程序對應一個Redis實例,不一樣的數據庫可用於存儲不一樣環境的數據。最後要注意,Redis集羣下只有db0,不支持多db。

本文地址:https://www.linuxprobe.com/redis-16-mysql.html

相關文章
相關標籤/搜索