閱讀的博客:https://www.cnblogs.com/kismetv/category/1186633.html
記憶體模型
-
記憶體劃分
- 資料本身
- redis行程運行本身需要的記憶體
- 緩沖區
- 記憶體碎片
-
存盤細節
-
資料模型

- dicEntry:每一個鍵值對(Key-Value)都會有一個dicEntry,
- Key:redis key,以SDS的格式存盤
- redisObject:redis value,以redisObject的格式存盤,
-
jemalloc
redis默認的記憶體分配器,
-
RedisObject
redis中的所有資料都是以RedisObject的形式存盤的,
typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */ int refcount; void *ptr; } robj; -
SDS
SDS(Simple Dynamic String),Redis采用SDS來標識字串
struct sdshdr { int len; int free; char buf[]; };buf表示位元組陣列,用來存盤字串;len表示buf已使用的長度,free表示buf未使用的長度,下面是兩個例子,
-
-
物件型別
redis支持五種型別的資料,
-
字串
- redis最基礎的型別,字串的長度不能超過512MB
-
哈希
- 哈希時redis支持的五種資料型別一直,redis作為key-value資料庫本身所使用的資料結構
-
串列
-
串列(list)用來存盤多個有序的字串,每個字串稱為元素;
-
一個串列可以存盤2^32-1個元素,
-
Redis中的串列支持兩端插入和彈出,并可以獲得指定位置(或范圍)的元素,可以充當陣列、佇列、堆疊等,
-
-
集合
- 集合(set)與串列類似,都是用來保存多個字串;
- 集合與串列有兩點不同:集合中的元素是無序的,因此不能通過索引來操作元素;集合中的元素不能有重復,
-
-
一個集合中最多可以存盤2^32-1個元素;
- 除了支持常規的增刪改查,Redis還支持多個集合取交集、并集、差集,
-
有序集合
- 有序集合與集合一樣,元素都不能重復;
- 但與集合不同的是,有序集合中的元素是有順序的,
- 與串列使用索引下標作為排序依據不同,有序集合為每個元素設定一個分數(score)作為排序依據,
持久化
持久化即備份,這是高可用的策略之一,有了備份,就可以在Redis故障通過備份進行恢復,redis持久化主要有RDB和AOF,
-
RDB
RDB(Redis DataBase),基于策略定時將redis記憶體中的資料保存到硬碟,需要時可以通過這個備份檔案進行恢復,
-
AOF
AOF(Append Only File),是把每次redis執行的命令記錄到日志檔案中(類似于MySql的Bin log),當Redis啟動時可以通過執行log中的命令來恢復資料,
主從復制
主從復制,是把一臺redis服務器上資料復制到其他服務器的機制,其中前者被稱為主節點(master),后者被稱為從節點(slave),
上面說的持久化是解決單機備份問題(記憶體到硬碟),主從復制主要解決資料在多機器之間的熱備份,實作負載均衡和故障恢復,
主從復制的主要主要作用:
- 資料冗余:資料熱備,多機備份,
- 故障恢復:當主節點出現問題時,可以讓從節點提供服務,是一種功能的冗余,
- 負載均衡:可以讓主節點寫,從節點多,可以把壓力分配到多個從節點,從而實作負載均衡,
- 高可用基石:主從復制時實作哨兵和集群的基礎,
哨兵
哨兵,Redis sentinel,在主從復制的基礎上實作故障恢復的自動化,其核心功能是主節點(master)的自動故障轉移,
主要功能:
- 監控(Monitor):哨兵不斷檢查主節點和從節點是否正常作業
- 自動故障轉移(Automatic failover):主節點不正常時,哨兵啟動自動故障轉移,它會將失效主節點的其中一個從節點升級為新的主節點,并讓其他從節點從這個新的主節點復制資料,
- 配置提供著(Configuration provider):客戶端可以通過哨兵來獲取主節點地址,
- 通知(Notification):哨兵可以把故障轉移結果通知給客戶端,
架構:

它由兩部分組成,哨兵節點和資料節點:
-
哨兵節點:哨兵系統由一個或多個哨兵節點組成,哨兵節點是特殊的redis節點,不存盤資料,
-
資料節點:主節點和從節點都是資料節點,
集群
持久化實作了單機的備份,主從解決了多機的熱備份,以及讀的操作的負載均衡,最終通過哨兵實作了主節點的自動故障遷移,
目前還有一個核心問題,主節點只有一個,寫操作只能寫到一個節點,還沒有實作負載均衡,存盤能力完全受限于單機的存盤能力,
集群就是用來解決寫操作負載均衡的問題,其核心就是資料分片,集群將資料分散到不同的集群上,解決單機存盤能力受限的問題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/226415.html
標籤:其他
上一篇:關于Visual Studio 2019安裝時VS installer無法下載檔案,進度條為0,顯示網路有問題的解決辦法
下一篇:【閱讀筆記】Redis
