Go語(yǔ)言中兩個(gè)比較流行的緩存庫(kù)使用示例
前言
在 Go 中實(shí)現(xiàn)帶有過(guò)期時(shí)間的緩存通常需要一個(gè)可以自動(dòng)處理鍵值過(guò)期的緩存系統(tǒng)。雖然標(biāo)準(zhǔn)庫(kù)中沒(méi)有直接提供這種功能,但有幾個(gè)流行的第三方庫(kù)可以很好地滿足這一需求。下面我會(huì)介紹兩個(gè)比較流行的 Go 緩存庫(kù):go-cache 和 bigcache。
1. go-cache
go-cache 是一個(gè)內(nèi)存中的鍵值對(duì)緩存庫(kù),支持可過(guò)期條目。它是一個(gè)線程安全的緩存庫(kù),可以設(shè)定每個(gè)緩存項(xiàng)的生存時(shí)間(TTL)。
安裝 go-cache:
go get github.com/patrickmn/go-cache
使用示例:
package main import ( "fmt" "github.com/patrickmn/go-cache" "time" ) func main() { // 創(chuàng)建一個(gè)緩存,設(shè)置默認(rèn)過(guò)期時(shí)間為 5 分鐘,每 10 分鐘清理過(guò)期項(xiàng)目 c := cache.New(5*time.Minute, 10*time.Minute) // 設(shè)置一個(gè)鍵值,過(guò)期時(shí)間為 1 分鐘 c.Set("key1", "value1", 1*time.Minute) // 從緩存中獲取鍵值 val, found := c.Get("key1") if found { fmt.Println("key1:", val) } // 等待超過(guò) 1 分鐘后再次嘗試獲取 time.Sleep(70 * time.Second) val, found = c.Get("key1") if found { fmt.Println("key1 still:", val) } else { fmt.Println("key1 has expired") } }
在這個(gè)示例中,我們創(chuàng)建了一個(gè) go-cache 實(shí)例,并添加了一個(gè)鍵值對(duì),設(shè)置了 1 分鐘的過(guò)期時(shí)間。通過(guò) Set 和 Get 方法可以輕松地添加和檢索緩存項(xiàng)。
2. bigcache
bigcache 是一個(gè)高效的鍵值緩存,專為單機(jī)環(huán)境優(yōu)化。它不自帶過(guò)期處理,但可以配置以在設(shè)置時(shí)啟用。
安裝 bigcache:
go get github.com/allegro/bigcache
使用示例:
package main import ( "fmt" "github.com/allegro/bigcache" "time" ) func main() { config := bigcache.DefaultConfig(10 * time.Minute) config.CleanWindow = 5 * time.Minute // 創(chuàng)建一個(gè)緩存 cache, err := bigcache.NewBigCache(config) if err != nil { panic(err) } // 添加鍵值 cache.Set("key1", []byte("value1")) // 獲取鍵值 entry, err := cache.Get("key1") if err != nil { fmt.Println("Error retrieving key1:", err) } else { fmt.Println("key1:", string(entry)) } // 模擬時(shí)間推移 time.Sleep(15 * time.Minute) _, err = cache.Get("key1") if err != nil { fmt.Println("key1 has expired") } }
bigcache
更適合處理大量數(shù)據(jù)和高負(fù)載情況,但其配置和使用相對(duì)復(fù)雜一些。
這兩個(gè)庫(kù)都能在 Go 中實(shí)現(xiàn)帶有過(guò)期時(shí)間的緩存,選擇哪一個(gè)取決于你的具體需求和應(yīng)用場(chǎng)景。
總結(jié)
到此這篇關(guān)于Go語(yǔ)言中兩個(gè)比較流行的緩存庫(kù)使用的文章就介紹到這了,更多相關(guān)Go語(yǔ)言緩存庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang結(jié)合mysql設(shè)置最大連接數(shù)和最大空閑連接數(shù)
本文介紹golang?中連接MySQL時(shí),如何設(shè)置最大連接數(shù)和最大空閑連接數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02Go用兩個(gè)協(xié)程交替打印100以內(nèi)的奇偶數(shù)的方法詳解
這篇文章主要給大家詳細(xì)介紹了Go用兩個(gè)協(xié)程交替打印100以內(nèi)的奇偶數(shù)的示例代碼,文中給大家介紹了兩個(gè)實(shí)現(xiàn)方法,使用無(wú)緩沖的channel和設(shè)置GOMAXPROCS=1,介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08golang使用net/rpc庫(kù)實(shí)現(xiàn)rpc
這篇文章主要為大家詳細(xì)介紹了golang如何使用net/rpc庫(kù)實(shí)現(xiàn)rpc,文章的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下2024-01-01Golang實(shí)現(xiàn)自己的orm框架實(shí)例探索
這篇文章主要為大家介紹了Golang實(shí)現(xiàn)自己的orm框架實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Go語(yǔ)言實(shí)現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法
這篇文章主要介紹了Go語(yǔ)言實(shí)現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法,以實(shí)例形式詳細(xì)分析了幾種常見(jiàn)的排序技巧與實(shí)現(xiàn)方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02golang項(xiàng)目如何上線部署到Linu服務(wù)器(方法詳解)
這篇文章主要介紹了golang項(xiàng)目如何上線部署到Linu服務(wù)器,本文通過(guò)兩種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10