中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go-cache的基本使用場景是什么

發布時間:2023-05-05 16:20:47 來源:億速云 閱讀:206 作者:iii 欄目:開發技術

這篇文章主要介紹“go-cache的基本使用場景是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“go-cache的基本使用場景是什么”文章能幫助大家解決問題。

什么是 go-cache

go-cache 是一個輕量級的基于內存的 K-V 儲存組件,內部實現了一個線程安全的 map[string]interface{},適用于單機應用。具備如下功能:

  • 線程安全,多 goroutine 并發安全訪問;

  • 每個 item 可以設置過期時間(或無過期時間);

  • 自動定期清理過期的 item;

  • 可以自定義清理回調函數;

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

go-cache 一般用作臨時數據緩存來使用,而不是持久性的數據存儲。對于某些停機后快速恢復的場景,go-cache支持將緩存數據保存到文件,恢復時從文件中將數據加載到內存。

使用

導入

github.com/patrickmn/go-cache

快速開始

c := cache.New(10*time.Second, 30*time.Second) 
// 默認過期時間10s;清理間隔30s,即每30s會自動清理過期的鍵值對  

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

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

// 設置一個鍵值對,沒有過期時間,不會自動過期,需要手動調用 Delete() 才能刪除 
c.Set("baz", 42, cache.NoExpiration)  

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

<-time.After(5 * time.Second) // 延時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)

常量與結構體

常量

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

這兩個參數可以用作 New() 函數的第一個入參,則默認過期時間小于0,意味著添加鍵值對時如果采用默認過期時間,則該鍵值對不會過期,因為 DeleteExpired() 方法會判斷 v.Expiration 是否大于 0,大于 0 時才會自動刪除。如果想刪除需要手動 Delete() 方法。

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

結構體

主要的結構體包括下面這些:

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

type Cache struct {   // 對外使用的 Cache
 *cache  // cache 實例
}

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

type janitor struct { // 清理器結構體
 Interval time.Duration // 清理時間間隔
 stop     chan bool     // 是否停止
}

Set()

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

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

Get()

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

刪除

刪除操作主要有兩個,執行刪除操作的時候都會判斷是否需要執行刪除回調函數。

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

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

其他

  • ItemCount(),返回所有數據的條數,這里的條數包括已過期但還未被刪除的數量;

  • Flush(),清空數據;

  • Items(),返回數據的未過期的數據,可以使用 NewFrom() 恢復數據;

備份恢復數據

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

關于“go-cache的基本使用場景是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜兰市| 湘潭市| 噶尔县| 沾益县| 衡南县| 灵川县| 襄城县| 保山市| 大方县| 古浪县| 金阳县| 小金县| 竹山县| 靖江市| 榆社县| 古交市| 古浪县| 西昌市| 郓城县| 托里县| 青岛市| 晋州市| 宜都市| 温泉县| 万宁市| 山阴县| 定结县| 德清县| 堆龙德庆县| 仲巴县| 佛学| 肇州县| 广元市| 栾城县| 阿城市| 茌平县| 遂平县| 陆川县| 全椒县| 东台市| 吴旗县|