原创 redis cluster集羣的源碼分析(1)

對於cluster.c的源碼分析,我將會分兩部分介紹。本文主要分析集羣通信和通信故障。 先大致歸納下cluster的主要函數 void clusterCron(void);//集羣的定時任務 int clusterProcessPack

原创 redis replication主從複製的源碼分析(1)

        對於replication.c的源碼分析,我將會分兩部分介紹主從複製的過程和主從同步的複製《redis replication主 從複製的源碼分析(2)》。本文主要分析slave連接master進行主從複製的過程實現。  

原创 redis sentinel哨兵機制的源碼分析

        sentinel是redis的高可用性解決方案:由一個或多個sentinel實例組成sentinel系統監視多個master以及master的slave, 並在被監視的master進入下線狀態時,自動將下線master的某

原创 函數指針

         函數指針是指向函數的指針變量。 因而“函數指針“本質是指針變量,只不過該指針變量指向函數。在編譯時,每一個函數都有一個入口地址,該入口地址就是函數指針所指向的地址。有了指向函數的指針變量後,我們就可以用指針變量調用函數,

原创 redis replication主從複製的源碼分析(2)

       前面的文章《redis replication主從複製的源碼分析(1)》分析來進行主從複製的流程,現在我們來分析redis複製的 實現。 同步        同步主要是從服務器進行主從連接時,將從服務器的數據庫狀態更新至主服

原创 redis lazyfree空間懶釋放的源碼分析

       redis是一個內存數據庫,必然就存在比較多的內存釋放,然而內存釋放又是一個比較重的操作,這樣就會 影響redis的正常運轉效率。所以,redis對於部分內存的釋放採取了懶釋放。空間懶釋放就是將內存的釋放交由 專門的線程進行

原创 redis過期鍵刪除機制的源碼分析

        在redis數據庫中,可以對鍵值對設置過期時間。當鍵值對過期時,redis會通過一定的機制將過期鍵刪除。 redis的過期鍵刪除策略有兩種:定期刪除和惰性刪除。 惰性刪除        惰性刪除是每次獲取鍵值對時,都對獲取

原创 redis dict字典的源碼分析

       Redis的字典用哈希表作爲底層實現,一個哈希表裏可以有很多哈希表節點,而每個哈希表節點就保存 了字典的一個鍵值對。  一、字典的基本實現 1、哈希表節點 typedef struct dictEntry { vo

原创 redis ae事件驅動的源碼分析

       redis是一個事件驅動的服務器,主要處理兩類事件:文件事件和時間事件。事件驅動模型的主要數據結構 如下: /* 文件事件數據結構*/ typedef struct aeFileEvent { int mask; /

原创 redis evict.c內存淘汰機制的源碼分析

           衆所周知,redis是一個內存數據庫,所有的鍵值對都是存儲在內存中。當數據變多之後,由於內存有 限就要淘汰一些鍵值對,使得內存有足夠的空間來保存新的鍵值對。在redis中,通過設置server.maxmemory 來

原创 golang實現ringbuffer(不定長)

     每個數據包寫入ringbuffer的存儲結構:      packet_size:uint16 | packet_ctx:byte[ ]      整個ringbuffer的結構:     ----------<——start:

原创 go的http詳解

       Go提供了一個完善的net/http包用於搭建web服務器,同時http能很簡單的對web的路由進行設置和操作。       http包建立的簡單的web服務器,路由器的配置,請求的監聽和處理。 package main

原创 redis networking通信協議的源碼分析

        networking的代碼主要是針對client的命令進行處理,主要是實現三個功能:client連接的管理; 解析client的請求;發送回覆內容給client。  一、client連接的

原创 redis t_hash哈希對象的源碼分析

       哈希對象的編碼可以是ziplist或者hashtable。         ziplist編碼的哈希對象使用壓縮列表作爲底層實現,當新的鍵值對加入哈希對象時,先將保存健的壓縮列表節點 添加到壓縮列表表尾,然後再將保存值的壓縮

原创 redis aof持久化的源碼分析

       除了rdb持久化功能之外,redis還提供了aof(append only file)持久化功能。與rdb不同,aof持久化 是通過保存redis服務器所執行的寫命令來記錄數據庫的狀態。 AOF持久化的實現