go: 实现简单的内存级别缓存

2020-03-06 13:23:26 浏览数 (1)

使用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)
}

0 人点赞