开源 golang 缓存库 cache2go 学习
// CacheTable 是一个带有名称的缓存表,通过名称标识可以支持同时创建多个不同用途的缓存。
type CacheTable struct {
// 内嵌读写互斥锁,用于保护本缓存表内部数据的并发访问
sync.RWMutex
// 缓存表的名称,名称不同表示不同的缓存表
name string
// 数据缓存项的实际存储位置,以 map 数据结构保存,支持任意类型的 key 和 value.
items map[interface{}]*CacheItem
// 负责执行过期缓存清理工作的定时器 Timer
cleanupTimer *time.Timer
// 下次缓存清理定时器执行前的等待时间,基于缓存中最早到期的时间计算出来
cleanupInterval time.Duration
// 用于本缓存表的日志记录器
logger *log.Logger
// 当检索一个不存在的 key 时自动执行的数据加载回调函数,主要用于缓存数据初始化
loadData func(key interface{}, args ...interface{}) *CacheItem
// 往缓存中增加一个新项时自动执行的回调函数
addedItem func(item *CacheItem)
// 从缓存中删除特定项之前自动执行的回调函数
aboutToDeleteItem func(item *CacheItem)
}
// CacheItem 表示缓存表中一个缓存项,其成员 data 即为缓存值。
type CacheItem struct {
// 内嵌读写互斥锁,用于保护本缓存项内部数据的并发访问
sync.RWMutex
// 缓存项的 key
key interface{}
// 缓存项的 value
data interface{}
// 有效时长/存活时长,本缓存项多久不被访问则过期,如果为 0,表示永不过期
lifeSpan time.Duration
// 本缓存项创建时间
createdOn time.Time
// 最后访问时间
accessedOn time.Time
// 已被访问次数
accessCount int64
// 本缓存项被删除之前自动执行的回调函数
aboutToExpire func(key interface{})
}