go: 实现简单的内存级别缓存
- 2020 年 3 月 6 日
- 筆記
使用go自带的sync.Map和time.AfterFunc可以很简单的实现一个基于内存的缓存map。key不多的时候,效果还是很不错的。
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) }