fastcache 是大牛 valyala (fasthttp 的作者)开源的一个轻量级缓存库。其优点是快速轻量、嵌入式。
fastcache 特点:
- 快速。 性能在多核CPU上表现更好。
- 线程安全的。 并发goroutine可以读写单个缓存实例。
- fastcache设计用于存储大量 K/V 数据而无需GC开销。
- Fastcache在创建期间达到设置的最大大小时会自动驱逐旧条目。
- 可以把缓存内容导出到文件或从文件导入。
- 简单的API。
fastcache 性能
综合读写,fastcache 是个很不错的库,可以方便作缓存。缺点是只能存储 []byte
类型。
可以对 struct
作序列化以后再保存。
下面是简单写一个可以缓存结构体与string
或 []byte
类型的函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func ObjCachedSet(mc *fastcache.Cache, k []byte, v interface{}) {
switch v2 := v.(type) {
case string:
mc.Set(k, youdb.S2b(v2))
case []byte:
mc.Set(k, v2)
default:
if jb, err := json.Marshal(v); err == nil {
mc.Set(k, jb)
}
}
}
func ObjCachedGet(mc *fastcache.Cache, k []byte, v interface{}, getByte bool) (mcValue []byte, exist bool) {
if mcValue = mc.Get(nil, k); len(mcValue) > 0 {
if getByte {
exist = true
return
} else {
err := json.Unmarshal(mcValue, v)
if err == nil {
exist = true
return
}
}
}
return
}
调用:
1
2
3
4
k := []byte("key")
v := "value"
ObjCachedSet(mc, k, v)
v, ok := ObjCachedGet(mc, k, nil, true)
传送门
https://github.com/VictoriaMetrics/fastcache
本文网址: https://golangnote.com/topic/272.html 转摘请注明来源