FAST Cache,即高速缓冲存储器,其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,也有快取记忆体的名称。
FAST CACHE为存储系统提供Flash驱动器级别的性能,增加了IOPS处理能力的同时,仅将热点数据置于Flash盘内,降低成本。
在 EasyRTC 中,需要将所有的在线用户存储在内存中加快速度。在最开始的设计中,会将所有的在线用户存储在 map 中,但是map是存在垃圾回收的,在垃圾回收的时候会出现停顿,并且还需要考虑后期数据量的增加,因此采用缓存库。经过调研一段时间后,确认使用 fastcache。
package main
import (
"fmt"
"github.com/VictoriaMetrics/fastcache"
)
func main() {
// 初始化 cache, 其中 1024 为存储的最大数据,可以根据使用场景调整
c := fastcache.New(1024)
defer c.Reset()
for i := 0; i < 100; i++ {
k := []byte(fmt.Sprintf("key %d", i))
v := []byte(fmt.Sprintf("value %d", i))
fmt.Println(len(v))
// 设置 key
c.Set(k, v)
vv := c.Get(nil, k)
if string(vv) != string(v) {
fmt.Println("unexpected value for key %q; got %q; want %q", k, vv, v)
} else {
fmt.Println("set value ok", string(vv))
}
c.Del(k)
vv = c.Get(nil, k)
if len(vv) > 0 {
fmt.Println("unexpected non-empty value got for key %q: %q", k, vv)
} else {
fmt.Println("delete value ok", string(vv), string(k))
}
}
}