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 | // 缓存项生命周期检查定时器 |