最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go-cache的基本使用場(chǎng)景示例解析

 更新時(shí)間:2023年04月23日 14:30:26   作者:LiP  
這篇文章主要為大家介紹了go-cache的基本使用場(chǎng)景示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

什么是 go-cache

go-cache 是一個(gè)輕量級(jí)的基于內(nèi)存的 K-V 儲(chǔ)存組件,內(nèi)部實(shí)現(xiàn)了一個(gè)線程安全的 map[string]interface{},適用于單機(jī)應(yīng)用。具備如下功能:

  • 線程安全,多 goroutine 并發(fā)安全訪問;
  • 每個(gè) item 可以設(shè)置過期時(shí)間(或無過期時(shí)間);
  • 自動(dòng)定期清理過期的 item;
  • 可以自定義清理回調(diào)函數(shù);

這里的 item 指的是 map 里的元素。

go-cache 一般用作臨時(shí)數(shù)據(jù)緩存來使用,而不是持久性的數(shù)據(jù)存儲(chǔ)。對(duì)于某些停機(jī)后快速恢復(fù)的場(chǎng)景,go-cache支持將緩存數(shù)據(jù)保存到文件,恢復(fù)時(shí)從文件中將數(shù)據(jù)加載到內(nèi)存。

使用

導(dǎo)入

github.com/patrickmn/go-cache

快速開始

c := cache.New(10*time.Second, 30*time.Second) 
// 默認(rèn)過期時(shí)間10s;清理間隔30s,即每30s會(huì)自動(dòng)清理過期的鍵值對(duì)  

// 設(shè)置一個(gè)鍵值對(duì),過期時(shí)間是 3s 
c.Set("a", "testa", 3*time.Second)  

// 設(shè)置一個(gè)鍵值對(duì),采用 New() 時(shí)的默認(rèn)過期時(shí)間,即 10s 
c.Set("foo", "bar", cache.DefaultExpiration)  

// 設(shè)置一個(gè)鍵值對(duì),沒有過期時(shí)間,不會(huì)自動(dòng)過期,需要手動(dòng)調(diào)用 Delete() 才能刪除 
c.Set("baz", 42, cache.NoExpiration)  

v, found := c.Get("a") 
fmt.Println(v, found) // testa,true  

<-time.After(5 * time.Second) // 延時(shí)5s 

v, found = c.Get("a") // nil,false  
fmt.Println(v, found)  

<-time.After(6 * time.Second) 

v, found = c.Get("foo") // nil,false  
fmt.Println(v, found) 

v, found = c.Get("baz") // 42,true  
fmt.Println(v, found)  

常量與結(jié)構(gòu)體

常量

const (
    NoExpiration time.Duration = -1    // 無有效時(shí)間
    DefaultExpiration time.Duration = 0   // 表示采用默認(rèn)時(shí)間
)

這兩個(gè)參數(shù)可以用作 New() 函數(shù)的第一個(gè)入?yún)?,則默認(rèn)過期時(shí)間小于0,意味著添加鍵值對(duì)時(shí)如果采用默認(rèn)過期時(shí)間,則該鍵值對(duì)不會(huì)過期,因?yàn)?DeleteExpired() 方法會(huì)判斷 v.Expiration 是否大于 0,大于 0 時(shí)才會(huì)自動(dòng)刪除。如果想刪除需要手動(dòng) Delete() 方法。

添加鍵值對(duì),比如執(zhí)行 Set()、Add() 等操作時(shí),這兩個(gè)常量也可以作為參數(shù),NoExpiration 表示沒有過期時(shí)間,DefaultExpiration 表示采用默認(rèn)的過期時(shí)間。

結(jié)構(gòu)體

主要的結(jié)構(gòu)體包括下面這些:

type Item struct {  // 鍵值對(duì)
 Object     interface{}     // 存放 K-V 的值,可以存放任何類型的值
 Expiration int64   // 鍵值對(duì)的過期時(shí)間(絕對(duì)時(shí)間)
}

type Cache struct {   // 對(duì)外使用的 Cache
 *cache  // cache 實(shí)例
}

type cache struct {
 defaultExpiration time.Duration   // 默認(rèn)的過期時(shí)間,添加一個(gè)鍵值對(duì)時(shí)如果設(shè)置默認(rèn)的過期時(shí)間(即代碼里的 DefaultExpiration)則會(huì)使用到該值
 items             map[string]Item   // 存放的鍵值對(duì)
 mu                sync.RWMutex   // 讀寫鎖
 onEvicted         func(string, interface{})  // 刪除key時(shí)的回調(diào)函數(shù)
 janitor           *janitor  // 定期清理器 定期檢查過期的 Item
}

type janitor struct { // 清理器結(jié)構(gòu)體
 Interval time.Duration // 清理時(shí)間間隔
 stop     chan bool     // 是否停止
}

Set()

Set()配置key/value對(duì),并附上過期時(shí)間。有兩個(gè)類似的方法Add()和replace()。

區(qū)別是,Set()不管key是否存在,都配置。Add()只能用于key不存在的情況,否則報(bào)錯(cuò),replace是反的,只能用于key存在的情況,否則報(bào)錯(cuò)。

Get()

獲取key/value對(duì),并返回是key是否存在且未過期。GetWithExpiration()相較Get()方法多了個(gè)返回過期時(shí)間的參數(shù)。

刪除

刪除操作主要有兩個(gè),執(zhí)行刪除操作的時(shí)候都會(huì)判斷是否需要執(zhí)行刪除回調(diào)函數(shù)。

Delete() 常規(guī)刪除,不管是否過期都會(huì)刪除。

DeleteExpired() 用于執(zhí)行批量刪除操作,只會(huì)刪除已過期的鍵值對(duì)。

其他

  • ItemCount(),返回所有數(shù)據(jù)的條數(shù),這里的條數(shù)包括已過期但還未被刪除的數(shù)量;
  • Flush(),清空數(shù)據(jù);
  • Items(),返回?cái)?shù)據(jù)的未過期的數(shù)據(jù),可以使用 NewFrom() 恢復(fù)數(shù)據(jù);

備份恢復(fù)數(shù)據(jù)

雖然 go-cache 比較傾向于當(dāng)做緩存數(shù)據(jù)來使用,但還是提供了備份數(shù)據(jù)和恢復(fù)數(shù)據(jù)的操作,數(shù)據(jù)使用 gob 序列化。

以上就是go-cache的基本使用場(chǎng)景示例解析的詳細(xì)內(nèi)容,更多關(guān)于go-cache使用場(chǎng)景示例的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go語(yǔ)言中CGO的使用實(shí)踐

    Go語(yǔ)言中CGO的使用實(shí)踐

    本文主要介紹了Go語(yǔ)言中CGO的使用實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Go語(yǔ)言map實(shí)現(xiàn)順序讀取

    Go語(yǔ)言map實(shí)現(xiàn)順序讀取

    當(dāng)我們遍歷 map 時(shí),那就是輸出的鍵值對(duì)順序是不確定的,本文主要介紹了Go語(yǔ)言map實(shí)現(xiàn)順序讀取, 文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Go標(biāo)準(zhǔn)庫(kù)-ServeMux的使用與模式匹配深入探究

    Go標(biāo)準(zhǔn)庫(kù)-ServeMux的使用與模式匹配深入探究

    這篇文章主要為大家介紹了Go標(biāo)準(zhǔn)庫(kù)-ServeMux的使用與模式匹配深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go語(yǔ)言集成開發(fā)環(huán)境IDE詳細(xì)安裝教程

    Go語(yǔ)言集成開發(fā)環(huán)境IDE詳細(xì)安裝教程

    VSCode是免費(fèi)開源的現(xiàn)代化輕量級(jí)代碼編輯器,支持幾乎所有主流的開發(fā)語(yǔ)言,內(nèi)置命令行工具和 Git 版本控制系統(tǒng),支持插件擴(kuò)展,這篇文章主要介紹了Go語(yǔ)言集成開發(fā)環(huán)境IDE詳細(xì)安裝教程,需要的朋友可以參考下
    2021-11-11
  • Go設(shè)計(jì)模式之備忘錄模式圖文詳解

    Go設(shè)計(jì)模式之備忘錄模式圖文詳解

    備忘錄模式是一種行為設(shè)計(jì)模式, 允許在不暴露對(duì)象實(shí)現(xiàn)細(xì)節(jié)的情況下保存和恢復(fù)對(duì)象之前的狀態(tài),本文主要通過一些圖片來給大家介紹一下Go的備忘錄模式,需要的朋友可以參考下
    2023-08-08
  • Go條件控制語(yǔ)句詳解(if-else、switch和select)

    Go條件控制語(yǔ)句詳解(if-else、switch和select)

    條件語(yǔ)句用于檢查一個(gè)條件是否為真,并根據(jù)條件的真假來決定是否執(zhí)行相應(yīng)的代碼,下面這篇文章主要給大家介紹了關(guān)于Go條件控制語(yǔ)句(if-else、switch和select)的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Golang實(shí)現(xiàn)按行讀取文件的方法小結(jié)

    Golang實(shí)現(xiàn)按行讀取文件的方法小結(jié)

    按行讀取文件相較于一次性載入,有著很多優(yōu)勢(shì),如內(nèi)存效率高、處理速度快、實(shí)時(shí)性高等,本文主要介紹了Golang按行讀取文件的相關(guān)方法,希望對(duì)大家有所幫助
    2024-02-02
  • Go模板后端渲染時(shí)vue單頁(yè)面沖突

    Go模板后端渲染時(shí)vue單頁(yè)面沖突

    go后端模版語(yǔ)法是通過 {{}} ,vue也是通過雙花括號(hào)來渲染的,如果使用go渲染vue的html頁(yè)面的時(shí)候就會(huì)報(bào)錯(cuò),本文主要介紹了Go模板后端渲染時(shí)vue單頁(yè)面沖突,感興趣的可以了解一下
    2024-01-01
  • Go語(yǔ)言中實(shí)現(xiàn)完美錯(cuò)誤處理實(shí)踐分享

    Go語(yǔ)言中實(shí)現(xiàn)完美錯(cuò)誤處理實(shí)踐分享

    Go?語(yǔ)言是一門非常流行的編程語(yǔ)言,由于其高效的并發(fā)編程和出色的網(wǎng)絡(luò)編程能力,越來越受到廣大開發(fā)者的青睞。本文我們就來深入探討一下Go?語(yǔ)言中的錯(cuò)誤處理機(jī)制吧
    2023-04-04
  • go:gin輸出日志文件方式

    go:gin輸出日志文件方式

    這篇文章主要介紹了go:gin輸出日志文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論

丹巴县| 岢岚县| 静海县| 镇雄县| 克什克腾旗| 星子县| 大竹县| 乡宁县| 镇巴县| 万年县| 通河县| 永仁县| 望江县| 建昌县| 梓潼县| 繁峙县| 武城县| 米林县| 扎鲁特旗| 祥云县| 梨树县| 敖汉旗| 康平县| 阜平县| 南昌县| 仙游县| 乐昌市| 贺州市| 曲水县| 桐柏县| 赫章县| 富蕴县| 辛集市| 毕节市| 通榆县| 广河县| 沭阳县| 南安市| 安国市| 鹤庆县| 抚远县|