Redis源碼解析(一):簡介,redis源碼解析簡介

來源:互聯網
上載者:User

Redis源碼解析(一):簡介,redis源碼解析簡介
   

     Redis 的作者,叫Salvatore Sanfilippo,來自意大利的西西里島,現在居住在卡塔尼亞。目前供職於Pivotal公司。他使用的網名是antirez。

    Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、nosql、Key-Value資料庫,並提供多種語言的API。同時又可以把它看成一個緩衝系統。它與Memcache的不同之處在於它是可持久化的而後者是完全基於記憶體的。而且它支援更多的value類型,除了string外,還支援lists(鏈表)、sets(集合)和zsets(有序集合)幾種資料類型。

    redis命令參考(中文)地址:http://redis.readthedocs.org/en/latest/。

    redis學習教程(英文)地址:http://labs.alcacoop.it/doku.php?id=articles:redis_land

    redis效能測試:http://www.cnblogs.com/lovecindywang/archive/2011/03/03/1969633.html

    Redis的持久化機制

    Redis由於支援非常豐富的記憶體資料結構類型,如何把這些複雜的記憶體組織方式持久化到磁碟上是一個難題,所以Redis的持久化方式與傳統資料庫的方式有比較多的差別,Redis一共支援四種持久化方式,分別是:

  • 定時快照方式(snapshot)
  • 基於語句追加檔案的方式(aof)
  • 虛擬記憶體(vm)
  • Diskstore方式

     在設計思路上,前兩種是基於全部資料都在記憶體中,即小資料量下提供磁碟落地功能,而後兩種方式則是作者在嘗試儲存資料超過實體記憶體時,即大資料量的資料存放區,截止到本文,後兩種持久化方式仍然是在實驗階段,並且vm方式基本已經被作者放棄,所以實際能在生產環境用的只有前兩種,換句話說Redis目前還只能作為小資料量儲存(全部資料能夠載入在記憶體中),海量資料存放區方面並不是Redis所擅長的領域。下面分別介紹下這幾種持久化方式:

     定時快照方式(snapshot):

     該持久化方式實際是在Redis內部一個定時器事件,每隔固定時間去檢查當前資料發生的改變次數與時間是否滿足配置的持久化觸發的條件,如果滿足則通過作業系統fork調用來建立出一個子進程,這個子進程預設會與父進程共用相同的地址空間,這時就可以通過子進程來遍曆整個記憶體來進行儲存操作,而主進程則仍然可以提供服務,當有寫入時由作業系統按照記憶體頁(page)為單位來進行copy-on-write保證父子進程之間不會互相影響。

該持久化的主要缺點是定時快照只是代表一段時間內的記憶體映像,所以系統重啟會丟失上次快照與重啟之間所有的資料。

     基於語句追加方式(aof):

     aof方式實際類似mysql的基於語句的binlog方式,即每條會使Redis記憶體資料發生改變的命令都會追加到一個log檔案中,也就是說這個log檔案就是Redis的持久化資料。

aof的方式的主要缺點是追加log檔案可能導致體積過大,當系統重啟恢複資料時如果是aof的方式則載入資料會非常慢,幾十G的資料可能需要幾小時才能載入完,當然這個耗時並不是因為磁碟檔案讀取速度慢,而是由於讀取的所有命令都要在記憶體中執行一遍。另外由於每條命令都要寫log,所以使用aof的方式,Redis的讀寫效能也會有所下降。

     虛擬記憶體方式:

     虛擬記憶體方式是Redis來進行使用者空間的資料換入換出的一個策略,此種方式在實現的效果上比較差,主要問題是代碼複雜,重啟慢,複製慢等等,目前已經被作者放棄。

    diskstore方式:

diskstore方式是作者放棄了虛擬記憶體方式後選擇的一種新的實現方式,也就是傳統的B-tree的方式,目前仍在實驗階段,後續是否可用我們可以拭目以待。

   

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.