原创 MySql(一) InnoDB存儲引擎

一.InnoDB體系架構 InnoDB的總體結構主要由三部分組成:負責各個功能的線程,介於線程與磁盤間的內存緩衝(用於提高數據庫允許速度),存於磁盤的文件。       二.MySql後臺線程 2.1 MasterThread Maste

原创 並行編程——從緩存一致性到內存屏障與volatile

一.CPU高速緩存 1.爲什麼需要高速緩存 現代CPU的速度比現代內存系統的速度快得多,比如在一個主頻爲1.8GHZ的CPU上,每秒有1.8*10^9個時鐘週期,假設每條指令平均需要數個週期,那每秒可執行的指令數亦是相當驚人的,而在這樣一

原创 Redis(五)壓縮列表介紹及部分源碼解析

一.概述        壓縮列表(ziplist)是列表和哈希對象中用於存儲數據的底層實現之一,一般用於存儲少量數據,且元素大小較小,如:較小整數,較短字符串,因爲壓縮列表可以使用較少的內存存儲多種不同類型的數據,且有着平均性能爲O(N)

原创 Redis(七)數據庫介紹及部分源碼解析

一.服務器與數據庫結構概述 Redis服務器以struct redisServer結構表示,其中以一些成員一起維護了服務器屬的數據庫,如: 用於存儲描述數據庫結構(redisDB)的數組,數組大小等等,如下圖所示: // 服務器結構 s

原创 Redis(六)redis對象介紹及部分源碼解析

一.概述       Redis中包含各種數據結構,但爲了提高靈活性,針對不同的情況下選擇合適的數據結構,Redis在數據結構之上增加了一層對象系統,其中包括五種對象類型:字符串對象,列表對象,哈希對象,集合對象和有序集合對象。每種對象可

原创 幾種cast轉換

一.dynamic_cast       其作用是在基類和派生類之間安全的進行指針或引用轉換,若不能成功轉換則會返回NULL(轉化指針時,若是轉化引用則會報錯)。其工作原理其實是在運行時檢查虛函數表中存儲的指針類型信息,因此dynamic

原创 Redis(四)整數集合介紹及源碼解析

一.概述        整數集合(intset)與hash表,跳躍表等一樣是集合鍵的底層實現之一,一般用於保存數量不多的整數,這是由於其實現機制導致的不能存儲過多元素,否則會造成效率問題。集合鍵的內部結構可以使用Redis命令OBJECT

原创 Redis(二)字典介紹及部分源碼刨析

一.概述    Redis中使用字典這種數據結構作爲數據庫的底層實現,對數據庫的增刪改查也是基於對字典的操作之上進行的,當進行持久化時再將字典中的數據保存至磁盤中。   二.Redis中的字典結構        Redis中的字典是使用h

原创 Redis(三)跳躍表介紹及源碼

一.理想跳躍表        查詢鏈表的時間複雜度O(n),即使該鏈表的是有序的,但若我們在鏈表上在加一層鏈,且每次跳過一個節點(即進行一次二分),如下圖所示:             如此一來,從L2鏈開始搜索,要查詢8只需4次即可,而

原创 Linux內核 ——內存尋址

一.概述       平時我們在進行高級語言編程時,總會遇到地址這個概念,在32位程序中,其範圍一般在0x00000000至0xffffffff之間,這就是虛擬地址,也稱爲線性地址。而當我們編寫彙編程序時,會遇到段(如:代碼段)與偏移的概

原创 彙編語言(寄存器)

一.概述 一個典型的CPU主要由運算器,控制器,寄存器等器件構成,它們靠內部總線相連(內部總線實現CPU內部各機器件間的聯繫,外部總線實現CPU和主板上其他器件之間的聯繫)。 本篇博文敘述CPU中的寄存器,程序員可以通過指令讀寫寄存器,從

原创 彙編筆記(基礎知識)

一.機器語言 機器語言是機器指令的集合,所謂機器指令就是一列二進制數字,計算機將其轉化爲一列高低電平,以驅動計算機的電子器間。 【問】:爲什麼每一種微處理器(CPU)都有自己的機器指令集。 【答】:由於不同硬件設計和內部結構的不同,就需要

原创 數據庫基礎

一.索引 1.索引簡介 當在數據庫中搜索一條數據時,若對整張表進行查詢效率會很低,爲了提高搜索速度,可以爲數據表中的一個或多個字段添加索引。所謂索引就是將數據表中的記錄按某個順序進行排序,以便可以快速找到需要查找的數據。每個索引都是依賴數

原创 redis(十三)集羣

一.概述 redis集羣是Redis提供的分佈式數據庫方案,它通過將數據進行分片存儲來實現,並提供複製和故障轉移功能。redis集羣由多個節點組成,每個節點都是一個運行在集羣模式下的redis服務器。   二.集羣的節點 1.節點 red

原创 redis(十二)Sentinel

一.概述 redis使用哨兵系統保證redis的穩定性與可靠性。每個哨兵系統由一個或多個sentinel實例組成,每個哨兵系統都可以監視任意多個主服務器,以及其屬下的從服務器,並在主服務器下線時(如由於網絡異常等導致主服務器掉線),自動將