golang 每日一庫之 bluele-gcache

bluele/gcache 是一個 高性能、功能豐富的 Go 語言緩存庫,支持多種緩存策略,如 LRU(最近最少使用)、LFU(最少使用頻率)、ARC(自適應緩存替換)等,可以靈活選擇適合的緩存模式。

1. 安裝

使用 go get 下載安裝:

go get github.com/bluele/gcache

然後在代碼中導入:

import "github.com/bluele/gcache"

2. 主要特性

3. 快速入門

3.1 創建一個 LRU 緩存

package main
import (
	"fmt"
	"github.com/bluele/gcache"
)
func main() {
	// 創建一個 LRU 緩存,容量爲 10
	cache := gcache.New(10).
		LRU().
		Build()
	// 存入數據
	cache.Set("key1", "value1")
	// 獲取數據
	value, err := cache.Get("key1")
	if err != nil {
		fmt.Println("Key not found!")
	} else {
		fmt.Println("Cache value:", value) // 輸出:Cache value: value1
	}
}

解析:

4. 進階用法

4.1 設置緩存過期時間(TTL)

import (
	"time"
)
// 創建帶 TTL 的緩存
cache := gcache.New(10).
	LRU().
	Expiration(5 * time.Second). // 5秒後自動過期
	Build()
cache.Set("temp", "data")
time.Sleep(6 * time.Second)
_, err := cache.Get("temp")
fmt.Println(err) // 輸出: "key not found"

解析:

4.2 使用 LFU(最少使用頻率)緩存

cache := gcache.New(10).
	LFU().
	Build()

LFU 適用於訪問模式偏向熱點數據 的場景,例如 熱點商品推薦

4.3 使用 ARC(自適應緩存替換)

cache := gcache.New(10).
	ARC().
	Build()

ARC(Adaptive Replacement Cache) 結合了 LRU 和 LFU 的優點,能更智能地適應不同的訪問模式。

4.4 自動加載(從數據庫等數據源獲取數據)

cache := gcache.New(10).
	LRU().
	LoaderFunc(func(key interface{}) (interface{}, error) {
		// 模擬數據庫查詢
		return "data_for_" + key.(string), nil
	}).
	Build()
value, _ := cache.Get("user_123")
fmt.Println(value) // 輸出: data_for_user_123

解析:

4.5 監聽緩存淘汰(Eviction Callback)

cache := gcache.New(2).
	LRU().
	OnEvicted(func(key, value interface{}) {
		fmt.Println("Evicted:", key, value)
	}).
	Build()
cache.Set("a", "A")
cache.Set("b", "B")
cache.Set("c", "C") // "a" 被淘汰

解析:

5. 適用場景

2ofJY7

6. 對比 gcache 與 golang/groupcache

trrHAN

如果需要分佈式緩存,可以考慮 groupcache,如果只需本地緩存gcache 更靈活。

7. 總結

✅ bluele/gcache 是一個 功能豐富、支持多種策略、併發安全 的本地緩存庫,適用於 高性能緩存、自動數據加載、LRU/LFU 需求 等場景。

📌 推薦使用場景:

如果你需要高效、靈活的 Go 語言緩存庫gcache 是一個非常不錯的選擇!🚀

標題:golang 每日一庫之 bluele/gcache
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/03/10/1741581153508.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/1yChKKoTV9CqToW63zrn9Q