原创 C++調用C#管理Azure虛擬機

    爲了使用自己寫的C++程序管理Azure虛擬機,查了好幾天資料,開始的思路是使用cmd命令調用powershell來管理,寫了幾天腳本後發現cmd下只能運行一些簡單的powershell命令,一套腳本在powershell下運行沒

原创 結合redis設計與實現的redis源碼學習-4-dict(字典)

字典,又稱符號表,關聯數組或者映射,是一種用於保存鍵值對的抽象數據結構,要保證的就是在字典中每個鍵都是獨一無二的,在字典中根據鍵來尋找鍵值對。  redis的數據庫就是使用字典作爲底層實現的,對數據庫的增刪改查也是建立在對字典的操作

原创 結合redis設計與實現的redis源碼學習-6-intset(整數集合)

整數集合是集合鍵的底層實現之一,當一個集合只包含整數值元素,並且這個結合的元素數量不多時,redis就會使用整數集合作爲集合建的底層實現。它可以保存類型爲int16_t,int32_t,int64_t的整數值,並且保證集合中不會出

原创 結合redis設計與實現的redis源碼學習-3-鏈表

在上一篇中,我們瞭解了redis的基礎數據結構SDS,在redis中,基本上所有的數據都是以SDS的形式存儲的,無論是long還是int。 在有了基礎數據類型後,我們就要了解它是怎樣在redis中使用的,今天我們來分析redis

原创 結合redis設計與實現的redis源碼學習-7-ziplist(壓縮列表)

壓縮列表是列表件和哈希鍵的底層實現之一,當一個列表件只包含少量列表項,並且每個列表項要麼就是小整數值,要麼就是長度比較短的字符串,那麼redis就會使用壓縮列表來做列表鍵的底層實現。 壓縮列表的特點: 1、壓縮列表是由一系列特

原创 結合redis設計與實現的redis源碼學習-10-hyperloglog(基數統計)

hyperloglog是redis用來做基數統計的算法,優點是在輸入元素的數量或者體積非常大時,基數所需的空間是固定的,並且是很小的,在redis中,每個hyperloglog鍵只需要花費12kb內存,就可以計算接近2^64個不同

原创 結合redis設計與實現的redis源碼學習-5-skiplist(跳躍表)

跳躍表示一種有序的數據結構他通過在每個節點中維持多個指向其他節點的指針,從而達到快速訪問節點的目的,平均訪問速度O(logN),最壞O(N)複雜度的節點查找,還可以通過順序性操作類批量處理節點。 在redis中,在實現有

原创 C++線程池-ThreadPool

今天介紹一下線程池,線程池還是比較簡單的,使用線程函數開闢幾條線程,每條線程使用一個循環檢測任務隊列,當有任務時執行,這裏爲了避免CPU的空轉,當有新任務加入隊列時,通知一個線程去執行它。 這個線程池具有以下特點: 1、定時檢

原创 結合redis設計與實現的redis源碼學習-8.0-object(對象)

重點來了! 在前面的幾個章節裏,我們陸續學習了redis用到的所有主要數據結構,但是redis並沒有直接使用這些數據結構來實現鍵值對數據庫,而是基於這些數據結構創建了一個對象系統,包含字符串對象,列表對象,哈希對象,集合對象和有

原创 結合redis設計與實現的redis源碼學習-8.2-t_string(字符串鍵)

t_string.c中定義了字符串鍵的實現過程。 #include "server.h" #include <math.h> /* isnan(), isinf() */ //檢查客戶端的字符串長度 static int chec

原创 結合redis設計與實現的redis源碼學習-8.3-t_list.c(列表鍵)

T_list.c主要說明了列表鍵和列表鍵的命令實現方式; #include "server.h" //將一個值放入列表中,根據where判斷是頭插還是尾插 void listTypePush(robj *subject, robj

原创 C++連接池

這是我在使用redis做託管服務時用到的連接池,主要以封裝hiredis的redisObj對象來作爲連接對象的,爲了保證連接存活,會定時檢測空閒的連接對象是否可以正常工作(正在使用的默認正常),對於操作失敗的會重新連接。 我在使

原创 結合redis設計與實現的redis源碼學習-11-數據庫(server.h/redisDb,notify.c)

在之前的學習中我們瞭解了redis所有的數據結構和使用方法,現在我們開始來學習redis數據庫相關的內容。 這一節先來學習服務器中的數據庫,主要代碼在server.h和Db.c中。 redis服務器的所有數據庫都保存在服務器狀

原创 時間輪定時器-Timewheel

最近有個大牛給我教了時間輪算法,並且看了他實現的源碼,認爲自己已經理解了他所實現的思想,這裏將我的代碼和理解分享一下: 時間輪是模仿鐘錶的方式,秒針走一圈,分針走一格,只有最裏圈的任務需要執行,轉一圈後分針(外一層)指向下一格,

原创 結合redis設計與實現的redis源碼學習-9-zipmap(壓縮圖)

在學習了所有redis設計與實現的數據結構後,我發現在redis中還有一些特殊的數據結構,今天我們來學習zipmap。 zipmap和ziplist比較相似,使用特殊的內存存儲方法來提升個數較少的鍵值對。具有以下特點: 1、使