3.go开源cache2go项目笔记——cachetable文件
该文件是项目中行数最多的go文件。共338行。
1 导入:"log"
"sort"
"sync"
"time"
2 CacheTable结构结构定义如下:
type CacheTable struct {
sync.RWMutex
namestring
itemsmap[interface{}]*CacheItem
cleanupTimer*time.Timer
cleanupIntervaltime.Duration
logger*log.Logger
loadDatafunc(key interface{}, args ...interface{}) *CacheItem
addedItemfunc(item *CacheItem)
aboutToDeleteItemfunc(item *CacheItem)
}
sync.Mutex 是一个互斥锁,它的作用是守护在临界区入口来确保同一时间只能有一个线程进入临界区。golang中sync包实现了两种锁Mutex (互斥锁)和RWMutex(读写锁),其中RWMutex是基于Mutex实现的,只读锁的实现使用类似引用计数器的功能
name是表名字
items是所有缓存的目录,是一个MAP结构,存的是CACHEITEM指针
cleanupTimer是清除缓存的定时器
cleanupInterval当前定时器已过去的时间
logger 表的日志记录记录句柄
loadData是加载不存在键时回调的函数
addedItem是增加新ITEM的回调函数
aboutToDeleteItem是从CACHE中删除ITEM前调用的函数
3 CacheItemPair结构体Key 变量键值是interface
AccessCount 访问计数
定义CacheItemPairList为CacheItemPair数组。
4 函数Swap交换两个CACHEITEM
5 函数Len返回CACHE ITEM数量。
6 函数Less比较两个ITEM访问的次数。
7 函数Count调用len函数返回item数量。
8 函数Foreach遍历所有ITEMS
9 函数MostAccessed
10 函数log
打印日志。内部日志函数。
11 函数SetDataLoader设置loadData函数句柄。
12 函数SetAddedItemCallback设置addedItem函数,每次有新的ITEM加入到缓存的时候调用。
13 函数SetAboutToDeleteItemCallback设置aboutToDeleteItem函数,每次有ITEM从缓存中删除的时候调用。
14 函数SetLogger设置logger函数。
15 函数expirationCheck检查是否过期
16 函数Add向表中增加item.
17 函数Delete从表中删除ITEM。
18 函数Exists判断是否存在于表中。
19 函数NotFoundAdd如果没有找到,就调用addedItem来创建item.
20 函数Value从缓存中获取ITEM,并调用keepalive.
21 函数Flush清除CACHE中的ITEM。
如果清除定时器不为nil,则停止定时器。
22 关于回调例如删除ITEM时候回调函数aboutToDeleteItem。
在删除ITEM的函数即Delete函数(cachetble.go)中使用了
aboutToDeleteItem :=table.aboutToDeleteItem将全局变量赋值,如果不是NIL则进行调用之来实现回调。