Golang 短小精干的包 go-cache
go-cache
是什么
go-cache
是 golang
的一个很好用的基于内存缓存的包。他是类似于 memcached
在内存缓存中存储键值对,比较适合应用在单机的应用程序中,如果是分布式服务或者多节点的服务需要考虑类似 redis
的缓存服务。任何对象都可以被存储,可以是给定的时间,也可以是永远的时间,而且这个缓存可以被多个 goroutine
安全地使用。尽管 go-cache
的并不是作为一个持久的数据存储使用而设计的,但是可以通过将缓存内容保存本地文件的方式进行持久化,以便再服务宕机重启之后回复缓存内容,个人并建议次操作,而且现在是容器化的时代,这种操作也不合适。
优点
- 线程安全的
map[string]interface{}
- 无需网络传输
- 可以存储任何对象
- 不仅可以设置过期时间,也可以设置为永不过期
缺点
- 不支持持久化
- 不支持分布式
如何使用 go-cache
安装 go-cache
上面介绍了 go-cache
的一些概念,下面我们说一下怎么安装,和其他的 golang
包一样。
go get github.com/patrickmn/go-cache
实例化 cache
import (
"github.com/patrickmn/go-cache"
"time"
)
var Cache = cache.New(5*time.Minute, 5*time.Minute)
怎样设置 cache
go-cache
包中提供了 set
方法设置缓存对现象或者缓存值,缓存被设置之后,就可以通过 go-cache
提供的 get
方法通过缓存 key
获取缓存的数据(对象、值)。
set
方法中有三个参数,分别是,k
:缓存的 key
,如果 key
已经存在,将会被覆盖;x
:被缓存的数据;d
:缓存过期时间,如果为 0 将会使用默认缓存时间,也就是实例化时候设置的超时间,如果为 -1 将永远不会过期。
c.Set("foo", "bar", cache.DefaultExpiration)
怎样获取 cache
上面我们已经缓存了数据,现在就可以从内存中取出缓存的数据,也很简单,只要使用 Get
方法就可以获取缓存数据。这个方法有两个返回值,分别是,interface{}
:缓存的数据,如果找不到或者缓存过期将会返回 nil
;bool
:是否找到了缓存的数据,有两种情况可能返回 false
,一种是缓存过期,另一种是没有这个过缓存。
foo, found := c.Get("foo")
if found {
fmt.Println(foo)
}
因为 golang
是静态类型,而缓存的数据可以是任意类型,要想获取真实类型的数据就需要进行转换。
if x, found := c.Get("foo"); found {
foo := x.(string)
// ...
}
除了上述的方法,还提供了 SetDefault,Add,Replace,GetWithExpiration,Increment,Increment各种数值类型,Decrement,Decrement各种数值类型,DeleteExpired,OnEvicted,Save,SaveFile,Load,LoadFile,ItemCount,Flush,NewFrom
如果真的想要 go-cache
持久化,又想分布式部署服务,可以将内存缓存重写为基于云厂商的对象存储,例如,华为的 OBS 对象存储服务。
- 点赞
- 收藏
- 关注作者
评论(0)