使用go自带的sync.Map和time.AfterFunc可以很简单的实现一个基于内存的缓存map。key不多的时候,效果还是很不错的。
代码语言:javascript复制package cache
import (
"sync"
"sync/atomic"
"time"
)
var globalMap sync.Map
var len int64
func Set(key string, data interface{}, timeout int) {
globalMap.Store(key, data)
atomic.AddInt64(&len, 1)
time.AfterFunc(time.Second*time.Duration(timeout), func() {
atomic.AddInt64(&len, -1)
globalMap.Delete(key)
})
}
func Get(key string) (interface{}, bool) {
return globalMap.Load(key)
}
func Len() int {
return int(len)
}