当前位置: 首页 > 工具软件 > cachego > 使用案例 >

3.go开源cache2go项目笔记——cachetable文件

翁文康
2023-12-01

 

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则进行调用之来实现回调。

 类似资料: