網(wǎng)站首頁 編程語言 正文
在實(shí)際項(xiàng)目中Redis常被應(yīng)用于做緩存,分布式鎖、消息隊(duì)列等。但是在搭建配置好Redis服務(wù)器后很多朋友應(yīng)該會(huì)發(fā)現(xiàn)和有這樣的疑問,為什么Redis默認(rèn)建立了16個(gè)數(shù)據(jù)庫
如下圖所示。
16個(gè)數(shù)據(jù)庫的由來
Redis是一個(gè)字典結(jié)構(gòu)的存儲(chǔ)服務(wù)器,一個(gè)Redis實(shí)例提供了多個(gè)用來存儲(chǔ)數(shù)據(jù)的字典,客戶端可以指定將數(shù)據(jù)存儲(chǔ)在哪個(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建立連接后會(huì)默認(rèn)選擇0號(hào)數(shù)據(jù)庫,不過可以隨時(shí)使用SELECT命令更換數(shù)據(jù)庫。
# 切庫
redis> SELECT 1 # 默認(rèn)0號(hào)db,切換為1號(hào)db
OK
redis [1] > GET username # 從1號(hào)庫中獲取 username
(nil)
在實(shí)際項(xiàng)目中則可以通過以Redis配置文件的形式指定數(shù)據(jù)庫,如下圖所示
正確理解Redis的“數(shù)據(jù)庫”概念
由于Redis不支持自定義數(shù)據(jù)庫的名字,所以每個(gè)數(shù)據(jù)庫都以編號(hào)命名。
開發(fā)者則需要自己記錄存儲(chǔ)的數(shù)據(jù)與數(shù)據(jù)庫的對(duì)應(yīng)關(guān)系。另外Redis也不支持為每個(gè)數(shù)據(jù)庫設(shè)置不同的訪問密碼,所以一個(gè)客戶端要么可以訪問全部數(shù)據(jù)庫,要么全部數(shù)據(jù)庫都沒有權(quán)限訪問。
但是,要正確地理解Redis的“數(shù)據(jù)庫”概念這里不得不提到一個(gè)命令:
# 清空一個(gè)Redis實(shí)例中所有數(shù)據(jù)庫中的數(shù)據(jù)
redis 127.0.0.1:6379> FLUSHALL
該命令可以清空實(shí)例下的所有數(shù)據(jù)庫數(shù)據(jù),這與我們所熟知的關(guān)系型數(shù)據(jù)庫所不同。
關(guān)系型數(shù)據(jù)庫多個(gè)庫常用于存儲(chǔ)不同應(yīng)用程序的數(shù)據(jù) ,且沒有方式可以同時(shí)清空實(shí)例下的所有庫數(shù)據(jù)。所以對(duì)于Redis來說這些db更像是一種命名空間,且不適宜存儲(chǔ)不同應(yīng)用程序的數(shù)據(jù)。
比如可以使用0號(hào)數(shù)據(jù)庫存儲(chǔ)某個(gè)應(yīng)用生產(chǎn)環(huán)境中的數(shù)據(jù),使用1號(hào)數(shù)據(jù)庫存儲(chǔ)測(cè)試環(huán)境中的數(shù)據(jù),但不適宜使用0號(hào)數(shù)據(jù)庫存儲(chǔ)A應(yīng)用的數(shù)據(jù)而使用1號(hào)數(shù)據(jù)庫B應(yīng)用的數(shù)據(jù),不同的應(yīng)用應(yīng)該使用不同的Redis實(shí)例存儲(chǔ)數(shù)據(jù)。
Redis非常輕量級(jí),一個(gè)空Redis實(shí)例占用的內(nèi)在只有1M左右,所以不用擔(dān)心多個(gè)Redis實(shí)例會(huì)額外占用很多內(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è)定。
對(duì)于db正確的理解應(yīng)為“命名空間”,多個(gè)應(yīng)用程序不應(yīng)使用同一個(gè)Redis不同庫,而應(yīng)一個(gè)應(yīng)用程序?qū)?yīng)一個(gè)Redis實(shí)例,不同的數(shù)據(jù)庫可用于存儲(chǔ)不同環(huán)境的數(shù)據(jù)。
最后要注意,Redis集群下只有db0,不支持多db。
原文鏈接:https://blog.csdn.net/suifeng629/article/details/103232461
相關(guān)推薦
- 2022-10-08 詳解C語言如何實(shí)現(xiàn)雙向帶頭循環(huán)鏈表_C 語言
- 2022-04-18 python使用py2neo創(chuàng)建neo4j的節(jié)點(diǎn)和關(guān)系_python
- 2022-09-15 Pycharm虛擬環(huán)境創(chuàng)建并使用命令行指定庫的版本進(jìn)行安裝_python
- 2022-09-04 React18中請(qǐng)求數(shù)據(jù)的官方姿勢(shì)適用其他框架_React
- 2023-12-13 idea git只查看某個(gè)人提交的代碼記錄
- 2022-07-23 詳解NumPy中的線性關(guān)系與數(shù)據(jù)修剪壓縮_python
- 2022-12-16 python靜態(tài)web服務(wù)器實(shí)現(xiàn)方法及代碼詳解_python
- 2023-03-23 python跳出雙層循環(huán)的方法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支