終於讀完redis的原始碼了,頗有感觸。
由於樓主用mac,所以適配了clion:
github:
由於網際網路公司整體工作結構比較快,平時零零散散的抽出一些時間來閱讀,所以前後持續了一段時間(2018-08-21-2019-05-22),關鍵是**做的事情才能堅持下去
其中資料結構部分、io模型部分、以及策略、aof、rdb,psync部分為精讀,其他架構設計部分,redis cluster,redis sentinel部分泛讀。
也來談談一部分感受吧。
1.redis適用的業務場景比較多,整體偏向於業務架構,單程序模型。核心的內容就是資料結構和io,當然還有其他一些比較特殊的點,,裡邊也有巢狀著一部分非同步執行緒(aof fsync,evict驅逐空間釋放,等等)和非同步程序rdb,aof
2.io復用主要是改寫的epoll**,kqueue的ctl演算法有優化,這裡不做討論
3.資料結構部分是精華,可以領略到redis在資料量較小的時候和資料量較大時候的不同處理策略,其中涉及到一部分演算法(dict bitreverse),編碼,還有空間和時間的平衡等策略,值得閱讀,樓主移植過redis skiplist到python,效率很高,很契合業務場景,不得不對作者由衷的敬佩
4.aof,rdb,這些主要為redis持久化,redis4.0之後有混合持久化
5.psync部分重同步主要是通過乙個環形緩衝佇列,來進行主從複製,十分高效
6.evict驅逐,這部分主要是redis支援ttl,lru,lfu,可以進行記憶體驅逐,演算法雖然寫的比較高效,但是在頻繁記憶體**的情況下,由於有寫入aof,還是有可能造成阻塞,所以redis的記憶體一定要保證充足,避免有大量的邊界逐出,(感覺redis這一塊寫的可以更好,可以先逐出7.整體的架構設計
aesetbeforesleepproc(server.el,beforesleep);
aesetaftersleepproc(server.el,aftersleep);
aemain(server.el);
主要有以上三部分,eventloop處理檔案事件,隨後處理時間事件,順序是由aeprocessevents決定。
我隨後會把加過注釋的redis原始碼放到github上,有興趣的可以隨時補充
《Redis實戰》讀後感
最近在做的專案需要用到redis,因為之前對redis只是有乙個很粗淺的了解,所以打算選一本redis的書籍進行閱讀,以便幫助我更好的完成專案,最後選擇了 redis實戰 這本書進行閱讀。redis實戰 不愧有實戰之名,除了第一章和第三章是介紹redis的資料結構以及操作指令 第四章介紹資料安全和效...
《監控》讀後感
監控 讀後感 監控 更合適被定義為一本偵探 它非常引人入勝地描述了幾起錯綜複雜的案件,描寫得棒極了,以致我夜以繼日地讀完了它,為的是找到事情的真相。它使用了倒序的方式,一開始,作者就用不安的口氣說道 到現在為止,我都無法從那些恐怖中掙脫開來。呵呵,到底是什麼事情呢,這麼勾人?很難為情,但我不得不說,...
《觀止》讀後感
對於 觀止 一書中我的解讀 這個是描述微軟當年nt開發專案組的人和事的,可以當作一種專案管理實戰來看,相當精彩.看微軟高層 找到正確的人,給予充分的信任和自由.看nt團隊內 追求技術,全身心的投入技術.讀到的內容 1.在目標一致 甚至是人生目標 的情況下,充分放權,讓每個成員發揮主觀能動性.2.搞技...