推薦一下自己的Go分散式快取專案

seaguest發表於2019-09-04

最近整理了一下自己的分散式快取方案,是 cache-aside 模式的二級快取(memory+redis)實現,目前已經線上上投入使用,經過百萬日活的驗證。

記憶體部分是採用的是 sync.Map, 讀取快取的時候先從記憶體讀,如果未讀到則去讀 redis,如果 redis 未讀到,則根據定義的載入函式載入到 redis 和記憶體。

快取有 lazy 模式,為了避免快取被擊穿,可以設定 lazy 模式,快取資料存活的時間更久,但是每次讀取的時候依然會判斷資料是否是最新的,不是最新的話會非同步載入更新。

通過 redis 的 Publish/Subscribe 功能,實現快取的分散式更新,目前僅實現刪除同步。

因為是很輕量級的,所以效能理論上會很不錯,測試 1000 個併發毫無壓力,有興趣的同學可以驗證一下。理論上效能的瓶頸在於載入函式裡資料庫的查詢,如果資料庫配置夠好,而 redis 單機 10 萬 QPS 應該沒什麼問題,那麼應該可以達到比較高的併發。

專案地址 https://github.com/seaguest/cache

歡迎大家批評指正!

更多原創文章乾貨分享,請關注公眾號
  • 推薦一下自己的Go分散式快取專案
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章