go-cache 是基於記憶體的、高速的,儲存k-v格式的快取工具。它適用於運行在單一機器上的應用程序,可以儲存任何資料類型的值,並且可以被多個goroutine安全地使用。 (建議學習:go)
雖然go-cache 不打算用作持久資料存儲,但是整個快取資料可儲存至檔案(或任何io.Reader/Writer )中,並且能快速從中指定資料來源加載,快速恢復狀態。
Demo
package main import ( "log" "time" "github.com/patrickmn/go-cache" ) func main(){ c := cache.New(30*time.Second, 10*time.Second) c.Set("Title", "Spring Festival", cache.DefaultExpiration) value, found := c.Get("Title") if found { log.Println("found:", value) } else { log.Println("not found") } time.Sleep(60*time.Second) log.Println("sleep 60s...") value, found = c.Get("Title") if found { log.Println("found:", value) } else { log.Println("not found") } }
output
2019/02/05 17:49:32 found: Spring Festival 2019/02/05 17:50:32 sleep 60s… 2019/02/05 17:50:32 not found
首先,建立一個新的cache,其中的key過期時間是30s,並且每10s清除快取中的過期key。
定期清除快取中的過期key,是透過一個常駐goroutine來實現的。
接著,設定一個key/value,及其過期時間。過期時間使用預設過期時間,即30s。
取得這個key,可以看到,此時這個key在cache中是存在的。
睡眠60s,使剛才設定的key過期。
再次取得這個key,此時key已經過期,被清除了,不在cache
以上是golang-cache是全域嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!