mapCache 缓存工具

mapCache 缓存工具概述

gotool 提供了基于 sync.map 的缓存操作工具,可操高效地实现数据缓存;

工具加载

import (
	"github.com/cnlesscode/gotool/mapCache"
)

Start() 启动缓存引擎

请在全局如 : main.go 中启动缓存引擎( 仅需一次 )。

mapCache.Start(120)

Cache() 函数

通过 Cache 函数实现缓存,参数

1 缓存名称
2 缓存有效期,单位秒
3 缓存失效时执行的数据读取函数
4 缓存参数

Remove() 删除缓存(模糊匹配)

功能 : 删除与名称匹配的缓存。

参数 : 缓存名称

Delete() 删除缓存 ( 精准匹配 )

功能 : 删除缓存。

参数 : 缓存名称

Clear()

功能 : 清空全部缓存。

使用示例

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
	})

}