網站首頁 編程語言 正文
在實際項目中Redis常被應用于做緩存,分布式鎖、消息隊列等。但是在搭建配置好Redis服務器后很多朋友應該會發現和有這樣的疑問,為什么Redis默認建立了16個數據庫
如下圖所示。
16個數據庫的由來
Redis是一個字典結構的存儲服務器,一個Redis實例提供了多個用來存儲數據的字典,客戶端可以指定將數據存儲在哪個字典中。
這與在一個關系數據庫實例中可以創建多個數據庫類似(如下圖所示),所以可以將其中的每個字典都理解成一個獨立的數據庫。
以MySQL實例為例
Redis默認支持16個數據庫,可以通過調整Redis的配置文件redis/redis.conf中的databases來修改這一個值,設置完畢后重啟Redis便完成配置。
客戶端與Redis建立連接后會默認選擇0號數據庫,不過可以隨時使用SELECT命令更換數據庫。
# 切庫
redis> SELECT 1 # 默認0號db,切換為1號db
OK
redis [1] > GET username # 從1號庫中獲取 username
(nil)
在實際項目中則可以通過以Redis配置文件的形式指定數據庫,如下圖所示
正確理解Redis的“數據庫”概念
由于Redis不支持自定義數據庫的名字,所以每個數據庫都以編號命名。
開發者則需要自己記錄存儲的數據與數據庫的對應關系。另外Redis也不支持為每個數據庫設置不同的訪問密碼,所以一個客戶端要么可以訪問全部數據庫,要么全部數據庫都沒有權限訪問。
但是,要正確地理解Redis的“數據庫”概念這里不得不提到一個命令:
# 清空一個Redis實例中所有數據庫中的數據
redis 127.0.0.1:6379> FLUSHALL
該命令可以清空實例下的所有數據庫數據,這與我們所熟知的關系型數據庫所不同。
關系型數據庫多個庫常用于存儲不同應用程序的數據 ,且沒有方式可以同時清空實例下的所有庫數據。所以對于Redis來說這些db更像是一種命名空間,且不適宜存儲不同應用程序的數據。
比如可以使用0號數據庫存儲某個應用生產環境中的數據,使用1號數據庫存儲測試環境中的數據,但不適宜使用0號數據庫存儲A應用的數據而使用1號數據庫B應用的數據,不同的應用應該使用不同的Redis實例存儲數據。
Redis非常輕量級,一個空Redis實例占用的內在只有1M左右,所以不用擔心多個Redis實例會額外占用很多內存。
集群情況下是否支持一個實例多個db?
要注意以上所說的都是基于單體Redis的情況。而在集群的情況下不支持使用select命令來切換db,因為Redis集群模式下只有一個db0。
再擴展一些集群與單機Reids的區別,感興趣的朋友可以去查閱相關的資料深入理解,這里就不做討論了。
- key批量操作支持有限:例如mget、mset必須在一個slot
- Key事務和Lua支持有限:操作的key必須在一個節點
- key是數據分區的最小粒度:不支持bigkey分區
- 不支持多個數據庫:集群模式下只有一個db0
- 復制只支持一層:不支持樹形復制結構
總結
Redis實例默認建立了16個db,由于不支持自主進行數據庫命名所以以dbX的方式命名。
默認數據庫數量可以修改配置文件的database值來設定。
對于db正確的理解應為“命名空間”,多個應用程序不應使用同一個Redis不同庫,而應一個應用程序對應一個Redis實例,不同的數據庫可用于存儲不同環境的數據。
最后要注意,Redis集群下只有db0,不支持多db。
原文鏈接:https://blog.csdn.net/suifeng629/article/details/103232461
相關推薦
- 2022-08-15 如何實現響應式(自適應)網頁
- 2022-05-15 Python?文本文件與csv文件的讀取與寫入_python
- 2022-08-27 python中DataFrame數據合并merge()和concat()方法詳解_python
- 2022-05-29 消息隊列應用場景介紹_其它綜合
- 2022-03-24 C語言常見的文件操作函數_C 語言
- 2022-06-16 Go項目編寫Makefile規則文件概述_Golang
- 2022-08-25 C語言超詳細講解線性表_C 語言
- 2022-06-04 服務器中TIME_WAIT狀態過多時的排查分析_應用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支