接下來講什么
今天開始講groupcache!
Memcached大家應該都不陌生,官網的介紹是:
Free & open source, high-performance, distributed memory object caching system(免費,開源,高性能的分布式內存對象緩存系統)。很多公司的產品都用到了Memcached,不過Memcached是用C語言開發的,我們的目的是提升Golang技能,所以這里我找了Golang版本的Memcached:groupcache來分析。
github地址:https://github.com/golang/groupcache
github上對groupcahe的介紹是:groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.也就是說這是一個庫,目標是在很多場景下替代memcached.等看完源碼我們再反過來看groupcache有哪些優秀的特性,對比來看官方介紹里的一堆特性介紹。
項目概覽
項目源碼結構:
咋一看不太直觀,consistenthash是一致性哈希,groupcachepb應該是和Protocol Buffers有關系,lru是最近最少使用淘汰算法,singleflight是單航班,什么是單航班后面看了代碼再來理解吧~,testpb和groupcachepb一樣,pb結尾和Protocol Buffers逃脫不了干系了。剩下的一堆根目錄的源碼文件啥的肯定是各種調用上面說到的幾個包,所以這里我們先看最上面的5個文件夾(package)分別是什么內容,分模塊攻破之后再看外層調用邏輯,把知識點再串聯到一起。
通過groupcache源碼閱讀我們能夠學到些什么
groupchace明顯比cache2go知識量大,源碼中至少包含了以下知識點,大家可以提前Google一下這些知識點,比如rpc是什么,golang中如何使用rpc;protobuf怎么用,ring hash(一致性哈希)算法原理,lru算法原理等,singleflight是一種編程技巧,看了源碼我們再來體會其中妙處。
-
rpc
-
protobuf
-
ring hash
-
lru
-
singleflight
ok,今天先講到這里,下一講我們來分析一致性哈希算法,然后看看groupcache中是怎么實現ring hash的。