REDIS設計過程的巧妙思路彙總

2021-09-23 17:16:56 字數 550 閱讀 9774

記憶體分配。redis記憶體分配底層呼叫的還是malloc函式,但是不同的地方在於malloc在分配的記憶體前面會寫入分配的記憶體大小,**如下:

void *zmalloc(size_t size)
這樣做的好處時可以統計出系統記憶體的情況,根據系統使用記憶體的情況執行淘汰等操作。但是redis仍然沒有解決記憶體碎片的問題。

redis的的網路框架linux環境中底層採用的epoll的方式,檔案事件和時間事件都在同乙個執行緒中處理,時間事件的到期通知利用int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout)或intselect(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout)(select方式)的超時引數阻塞通知。redis巧妙地把檔案事件和時間事件統一到乙個執行緒中處理。但是redis處理時間事件時是遍歷整個鍊錶,此處可以視為乙個優化點。

待續

Python logging 的巧妙設計

引言 logging 的基本用法網上很多,這裡就不介紹了。在引入正文之前,先來看乙個需求 假設需要將某功能封裝成類庫供他人使用,如何處理類庫中的日誌?數年前在乙個 c 開發的專案中,我用了這樣的方法 定義乙個 logging 基類,所有需要用到日誌的類都繼承這個基類,這個基類中定義乙個 loghan...

位運算的巧妙設計

位運算子 例子名稱 結果 a b and 按位與 將把 a 和 b 中都為 1 的位設為 1。a b or 按位或 將把 a 和 b 中任何乙個為 1 的位設為 1。a b xor 按位異或 將把 a 和 b 中乙個為 1 另乙個為 0 的位設為 1。a not 按位取反 將 a 中為 0 的位設為...

QT 巨集定義中比較巧妙的設計

qt 巨集定義中比較巧妙的設計 今天在學習qt qml 中發現一段巧妙的巨集定義故記錄下來。在mian.cpp中 如下 include shared shared.h declarative example main demos calqlatr calqlatr 在shared.h中 如下 def...