type LruCache struct {
//缓存容量
size int
//缓存list节点
evictList *list.List
//缓存元素
cache map[interface{}]*list.Element
//元素过期时间
ttl time.Duration
//淘汰元素回调函数
onEvict EvictCallback
//读写锁
lock sync.RWMutex
}
//过期时间
const (
Expired = 60 * time.Second
)
//数据淘汰时的回调函数
onEvicted := func(k interface{}, v interface{}) {
}
//创建lrucache
l, err := NewLRUCache(16, Expired, onEvicted)
if err != nil {
log.Errorf("err: %v", err)
return
}
//存放32个数据
for i := 0; i < 32; i++ {
l.Put(i, i, Expired)
}
//长度为16,0—15已经被淘汰
log.Infof("len:%d",l.Len())
l.Get(2) //没有此元素,已经被淘汰
l.Get(30) //有此元素