數據模型
html
jemallocredis
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支持五種類型的數據。ide
字符串日誌
哈希
列表
列表(list)用來存儲多個有序的字符串,每一個字符串稱爲元素;
一個列表能夠存儲2^32-1個元素。
Redis中的列表支持兩端插入和彈出,並能夠得到指定位置(或範圍)的元素,能夠充當數組、隊列、棧等。
集合
有序集合
持久化即備份,這是高可用的策略之一,有了備份,就能夠在Redis故障經過備份進行恢復。redis持久化主要有RDB和AOF。
RDB(Redis DataBase),基於策略定時將redis內存中的數據保存到硬盤。須要時能夠經過這個備份文件進行恢復。
AOF(Append Only File),是把每次redis執行的命令記錄到日誌文件中(相似於MySql的Bin log),當Redis啓動時能夠經過執行log中的命令來恢復數據。
主從複製,是把一臺redis服務器上數據複製到其餘服務器的機制,其中前者被稱爲主節點(master)。後者被稱爲從節點(slave)。
上面說的持久化是解決單機備份問題(內存到硬盤),主從複製主要解決數據在多機器之間的熱備份,實現負載均衡和故障恢復。
主從複製的主要主要做用:
哨兵,Redis sentinel,在主從複製的基礎上實現故障恢復的自動化。其核心功能是主節點(master)的自動故障轉移。
主要功能:
架構:
它由兩部分組成,哨兵節點和數據節點:
哨兵節點:哨兵系統由一個或多個哨兵節點組成,哨兵節點是特殊的redis節點,不存儲數據。
數據節點:主節點和從節點都是數據節點。
持久化實現了單機的備份,主從解決了多機的熱備份,以及讀的操做的負載均衡,最終經過哨兵實現了主節點的自動故障遷移。
目前還有一個核心問題,主節點只有一個,寫操做只能寫到一個節點,尚未實現負載均衡,存儲能力徹底受限於單機的存儲能力。
集羣就是用來解決寫操做負載均衡的問題。其核心就是數據分片。集羣將數據分散到不一樣的集羣上,解決單機存儲能力受限的問題。