Redis學習


Redis: A persistent key-value database with built-in net interface written in ANSI-C for Posix systems. Redis是現在很火的高性能KV內存數據庫,支持豐富的數據類型,支持持久化、數據同步等DB特性。Redis是開源的,代碼量不大2W+,代碼風格和實現都很值得學習。在開源的時代,模仿好代碼估計是最快的學習方式。

使用

推薦如下資料:

Redis系統性介紹

一個很棒的Redis介紹PPT

Redis官方文檔

實現

推薦如下資料:

Redis內存存儲結構分析

Redis RDB文件格式全解析,英文:https://github.com/sripathikrishnan/redis-rdb-tools/wiki/Redis-RDB-Dump-File-Format

協議規范(Protocol specification)

Redis: under the hood

解密Redis持久化

Replication

Redis官方文檔

可復用代碼(版本2.6.3)

malloc封裝():tcmalloc|jemalloc|libc 使用最佳的malloc封裝,libc的malloc不提供獲取分配內存大小的接口。

zmalloc.h, zmalloc.c

異步網絡庫:封裝各種事件組件,提供統一的接口。

ae.c  ae_epoll.c  ae_evport.c  ae.h  ae_kqueue.c  ae_select.c

TCP|UNIX網絡封裝: 很簡單的封裝。

anet.h, anet.c, syncio.c(阻塞式讀寫)

數據結構

adlist.h, adlist.c (通用雙向鏈表), ziplist.h, ziplist.c, zipmap.h, zipmap.c,  intset.h, intset.c(基於連續內存的小數據存儲結構), sds.h, sds.c(Binary Safe字符串)

lzf壓縮算法

lzf -- an extremely fast/free compression/decompression-method: http://liblzf.plan9.de/

lzf_c.c  lzf_d.c  lzf.h  lzfP.h  

文件讀寫: 封裝基於文件和內存的數據讀寫。

rio.h, rio.c 

工具

crc64.c,  endianconv.h, endianconv.c(將大端數據轉成小端,性能考慮), memtest.c(內存測試工具), pqsort.h, pqsort.c(部分快排), rand.h, rand.c, sha1.c, sha1.h(開源的sha), util.c, util.h(字符串匹配,字符串和整形數轉換)

設計

靈活協議

Redis采用可讀可組合的文本協議。Redis采用統一的命令格式,基於統一的規范命令Redis天生具備解析和執行多條命令的能力,因此Redis非常容易支持:批量命令、事務、原子操作(腳本原子操作)等。

權衡

Redis的設計需要做各種權衡,每一種權衡都意味着不同的實現方案、資源、性能的折中。Redis不可能適合所有的使用場景,作為KV的內存數據庫,Redis做了很多針對性設計:高性能優先、高內存使用效率、多樣的數據結構(內存易實現)、單線程讀寫(CPU非瓶頸)、數據快照(RDB文件)、可過期的數據,同時提供其他可配置的功能:AOF(日志)、可配置的小數據格式、主從Replication、嚴格內存限制或swap、LRU緩存、磁盤存儲等。

小技巧

Redis Administration

FAQ

memory-optimization

其他資料

Redis資料匯總專題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM