本地缓存
针对使用非常频繁的表,如某些配置表,往往查询非常频繁并且是表非常小。这个时候可以采取缓存到内存中,定时的去reload 数据,刷新缓存。
核心结构体
type LoadDataFunc func(ctx context.Context, c *cache.Cache) (map[string]interface{}, error)
type LocalCache struct {
*cache.Cache
name string // cache name
lastUpdateTime int64
ctx context.Context
ReloadIncrementInterval time.Duration // wait for reload data
loadFunc LoadDataFunc // how to load, load what
sync.Mutex
//flush bool
}
使用中还是主要依托于
"github.com/patrickmn/go-cache"
已经帮忙实现个很大一部分功能,没有必要重复造轮子。
关键实现就在于
- 如何检测时间到达然后调用reload 方法去重新load 数据。这个reload的时间间隔和load数据的时间都是应该客户应该注意的点。
- reload 方法的时间,返回全量数据,转为cache 的格式。