<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
go-cache 是一個輕量級的基於記憶體的 K-V 儲存元件,內部實現了一個執行緒安全的 map[string]interface{}
,適用於單機應用。具備如下功能:
這裡的 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()設定key/value對,並附上過期時間。有兩個類似的方法Add()和replace()。
區別是,Set()不管key是否存在,都設定。Add()只能用於key不存在的情況,否則報錯,replace是反的,只能用於key存在的情況,否則報錯。
獲取key/value對,並返回是key是否存在且未過期。GetWithExpiration()相較Get()方法多了個返回過期時間的引數。
刪除操作主要有兩個,執行刪除操作的時候都會判斷是否需要執行刪除回撥函數。
Delete() 常規刪除,不管是否過期都會刪除。
DeleteExpired() 用於執行批次刪除操作,只會刪除已過期的鍵值對。
雖然 go-cache 比較傾向於當做快取資料來使用,但還是提供了備份資料和恢復資料的操作,資料使用 gob 序列化。
以上就是go-cache的基本使用場景範例解析的詳細內容,更多關於go-cache使用場景範例的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45