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

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值