「Go 工具箱」一個基於雙向鏈表實現的 LRU 緩存工具
大家好,我是漁夫子。本號新推出「go 工具箱」系列,意在給大家分享使用 go 語言編寫的、實用的、好玩的工具。
今天給大家推薦的工具是一個實現了固定緩存大小、線程安全的緩存組件,該緩存實現了最近最少使用的策略:golang-lru。
**實現原理分析:**該包是基於內置包 list.List 實現的,list.List 的底層是一個雙向鏈接。並提供了一個列表的大小。當對該列表中的某個元素進行訪問或添加操作時,就將該元素移動到鏈表的最前面。當新添加元素後,元素數量超過了列表的大小,則將最後一個元素移除。
該包使用起來也很簡單,首先給緩存設置一個容量大小,然後就可以對元素進行添加和刪除了,如果緩存中超過了 128 個元素,在操作的同時就會把最近沒有使用的元素給刪除掉。如下:
cache, _ := lru.New(128)
// 往緩存中添加一個key-value
cache.Add("age", 19)
// 獲取緩存中的key的value
cache.Get("age")
// 移除緩存中的key
cache.Remove("age")
//獲取緩存中元素的個數
cache.Len()
更多項目詳情請查看如下鏈接。
開源項目地址:https://github.com/hashicorp/golang-lru
開源項目作者:hashicorp
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/605zrHjHFsjJvRq7_xFP_Q