gotool 提供了基于 sync.map 的缓存操作工具,可操高效地实现数据缓存;
import (
"github.com/cnlesscode/gotool/mapCache"
)
请在全局如 : main.go 中启动缓存引擎( 仅需一次 )。
mapCache.Start(120)
通过 Cache 函数实现缓存,参数
1 缓存名称
2 缓存有效期,单位秒
3 缓存失效时执行的数据读取函数
4 缓存参数
功能 : 删除与名称匹配的缓存。
参数 : 缓存名称
功能 : 删除缓存。
参数 : 缓存名称
功能 : 清空全部缓存。
package main
import (
"fmt"
"time"
"github.com/cnlesscode/gotool/mapCache"
)
type Person struct {
Name string
Age int
}
// 模拟一个动态获取数据函数
func getData(args ...any) (any, error) {
fmt.Printf("%v\n", "动态函数执行了")
fmt.Printf("参数传递 : %v\n", args)
return []Person{{"张三", 18}, {"lisi", 18}}, nil
}
func main() {
// 启动缓存引擎 仅需要在全局启动一次!
mapCache.Start(120)
// 第1次获取缓存
persons, _ := mapCache.Cache("Person", 5, getData, 22)
fmt.Printf("persons: %T %v\n", persons, persons)
// 第2次获取缓存
// 使用断言转换数据类型示例
time.Sleep(time.Second * 3)
persons2, err := mapCache.Cache("Person", 2, getData, 22)
if err == nil {
persons2f, _ := persons2.([]Person)
fmt.Printf("persons2: %T %v\n", persons2, persons2f[0].Name)
}
// // 设置缓存
// mapCache.Set("a", 100, "a...")
// mapCache.Set("b", 100, "b...")
// 删除缓存
mapCache.Remove("a")
// 清空缓存
// mapCache.Clear()
// 观察缓存 map
mapCache.MapCacher.Range(func(key, value any) bool {
fmt.Printf("key: %v\n", key)
return true
})
}