介绍
go-cache 是一个内存中的 key:value 存储/缓存,类似于 memcached,适用于在单机上运行的应用程序。任何对象都可以在给定的持续时间内或永远存储,并且缓存可以被多个 goroutine 安全地使用。
尽管 go-cache 并不打算用作持久数据存储,但整个缓存可以保存到文件(或任何 io.Reader/Writer)并从文件中加载,以便快速从停机中恢复。
安装
go get github.com/patrickmn/go-cache
用法
import (
"fmt"
"github.com/patrickmn/go-cache"
"time"
)
func main() {
//创建一个缓存,默认过期时间为5分钟
//每10分钟清理一次过期物品
c := cache.New(5*time.Minute, 10*time.Minute)
//设置键“foo”的值为“bar”,过期时间为默认值
c.Set("foo", "bar", cache.DefaultExpiration)
//设置密钥“baz”的值为42,不设置过期时间
//(项目不会被删除,直到它重置,或删除使用
// c.Delete("baz")
c.Set("baz", 42, cache.NoExpiration)
//从缓存中获取与键foo关联的字符串
foo, found := c.Get("foo")
if found {
fmt.Println(foo)
}
//因为Go是静态类型的,缓存值可以是任何类型
//当值传递给不需要的函数时,需要断言
//接受任意类型,例如接口{}。 最简单的方法是
//只会被使用一次的值。 传递给另一个人
/ /函数是:
foo, found := c.Get("foo")
if found {
MyFunction(foo.(string))
}
//如果在同一个函数中多次使用该值,这将变得冗长乏味。
//你可以这样做:
if x, found := c.Get("foo"); found {
foo := x.(string)
// ...
}
// 或者
var foo string
if x, found := c.Get("foo"); found {
foo = x.(string)
}
// ...
// foo can then be passed around freely as a string
// Want performance? Store pointers!
c.Set("foo", &MyStruct, cache.DefaultExpiration)
if x, found := c.Get("foo"); found {
foo := x.(*MyStruct)
// ...
}
}
请参阅自述文件和文档。