golang中cache组件有很多, 比如groupcache、bigcache等。 本文介绍groupcache的使用。
groupcache是memcache的作者开源的一个项目,在许多情况下,它是memcached的替代品。
对比memcache,相似处:
不同处:
groupcache不支持更新,也不支持删除,数据的载入是通过 GetterFunc
函数来操作的。
groupcache适合有高性能要求,数据无更新的场景。
使用NewGroup初始化一个缓存组,需要指定一个GetterFunc
。
通过dest.SetString
设置字符串类型的数据。
通过dest.SetProto
设置proto(如grpc请求的返回值)类型的数据。
通过dest.SetBytes
设置butes类型的数据。
stringGroup = NewGroup(stringGroupName, cacheSize, GetterFunc(func(_ context.Context, key string, dest Sink) error {
// 数据获取逻辑, 通过dest.SetString方法设值
return dest.SetString("ECHO:")
}))
使用Group.Get
方法获取一个缓存值
var s string
err := stringGroup.Get(dummyCtx, fromChan, StringSink(&s))
如果未命中, groupcache会调用初始化时声明的GetterFunc
来做数据载入