cache2go介绍
cache2go是golang的一个对象缓存库,可设置对象的缓存周期
cache2go官方案例
下载cache2go
| 1 | go get github.com/muesli/cache2go | 
| 1 | package main | 
执行结果
| 1 | $ go run mycachedapp.go | 
cache2go是golang的一个对象缓存库,可设置对象的缓存周期
下载cache2go
| 1 | go get github.com/muesli/cache2go | 
| 1 | package main | 
执行结果
| 1 | $ go run mycachedapp.go | 
| 1 | ├── LICENSE.txt | 
./cache2go/cachetable.go
缓存表是一个map结构,key为表名,value为CacheItem缓存对象1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25// 缓存表结构体
type CacheTable struct {
    // 读写锁
    sync.RWMutex
    // 缓存表名称
    name string
    // 缓存表中的缓存项
    items map[interface{}]*CacheItem
    // 缓存表清理定时器
    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)
}
./cache2go/cacheitem.go
| 1 | // 缓存项结构体 | 
./cache2go/cache.go
| 1 | var ( | 
./cache2go/cachetable.go
| 1 | // 添加一个缓存对象到缓存表中 | 
./cache2go/cacheitem.go
| 1 | // 创建一个缓存项对象 | 
./cache2go/cachetable.go
| 1 | // 删除时回调:当删除一个缓存对象时回调该方法 | 
./cache2go/cachetable.go
| 1 | // 删除一个缓存项从缓存表中 | 
./cache2go/cachetable.go
| 1 | // 删除所有缓存项从缓存表中 | 
./cache2go/cachetable.go
每次从缓存表中取值时会执行KeepAlive函数,更新accessedOn和accessCount字段,用于判断当前缓存项是否过期
| 1 | if ok { | 
./cache2go/cacheitem.go
| 1 | // 更新缓存项访问的时间戳并访问次数+1 | 
./cache2go/cachetable.go
| 1 | // 缓存项生命周期检查定时器 |