gcache是提供统一的缓存管理模块,提供了开发者可自定义灵活接入的缓存适配接口,并提供了高速内存缓存适配实现。
gcache
使用方式:
import "github.com/gogf/gf/os/gcache"
接口文档:
https://godoc.org/github.com/gogf/gf/os/gcache
简要介绍:
gcache默认提供默认的高速内存缓存对象,可以通过包方法操作内存缓存,也可以通过New方法创建内存缓存对象。在通过包方法使用缓存功能时,操作的是gcache默认提供的一个gcache.Cache对象,具有全局性,因此在使用时注意全局键名的覆盖。
New
gcache.Cache
gcache使用的键名类型是interface{},而不是string类型,这意味着我们可以使用任意类型的变量作为键名,但大多数时候建议使用string或者[]byte作为键名,并且统一键名的数据类型,以便维护。
interface{}
string
[]byte
gcache存储的键值类型是interface{},也就是说可以存储任意的数据类型,当获取数据时返回的也是interface{}类型,若需要转换为其他的类型可以通过gcache的Get*方法便捷获取常见类型。注意,如果您确定知道自己使用的是内存缓存,那么可以直接使用断言方式对返回的interface{}变量进行类型转换,否则建议使用GetVar方法后通过泛型的对应方法完成类型转换。
Get*
GetVar
另外需要注意的是,gcache的缓存过期时间参数duration的类型为time.Duration类型,在Set缓存变量时,如果缓存时间参数duration = 0表示不过期,duration < 0表示立即过期,duration > 0表示超时过期。
duration
time.Duration
Set
duration = 0
duration < 0
duration > 0
Context
gcache组件支持Context上下文变量的传递,通过链式操作方法实现。Context上下文特别对于第三方适配器实现的缓存能力很有必要,例如Redis缓存适配需要通过Context来传递链路跟踪信息。
Redis
方法定义:
// Ctx is a chaining function, which shallowly clones current object and sets the context // for next operation. func Ctx(ctx context.Context) *Cache
使用示例:
gcache.Ctx(ctx).Set("key", "value", 0) fmt.Println(gcache.Ctx(ctx).Get("key"))
除了redis,是不是应该提供一个文件类型的缓存
直接用默认的gcache不好吗?用起来很方便,或者也可以自己实现一个基于文件系统的缓存适配器
嗯,是的,我现在就是用gcache和gfile了,也很方便
可以自己实现
也想过自己实现,但是里面大概有十几个接口定义.比较麻烦
5 Comments
iamyl
除了redis,是不是应该提供一个文件类型的缓存
aries
直接用默认的gcache不好吗?用起来很方便,或者也可以自己实现一个基于文件系统的缓存适配器
iamyl
嗯,是的,我现在就是用gcache和gfile了,也很方便
海亮
可以自己实现
iamyl
也想过自己实现,但是里面大概有十几个接口定义.比较麻烦