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