golang cacheMap
- 作者:
- 淡白
- 创建时间:
- 2020-12-12 20:30:04
- Go
摘要:本文介绍了一个简单的缓存实现方法,通过使用Map来存储缓存数据,并利用sync.Mutex实现并发安全。其中缓存数据包含一个值和过期时间,可以通过SetCache方法设置缓存并指定过期时间,通过GetCache方法获取缓存值,通过Remove方法移除缓存。示例代码展示了如何使用该缓存库,先设置一个缓存值为"cache"并设置过期时间为10秒,然后获取并打印该缓存值。
缓存
为了缓解一些接口的压力(数据还重复计算和数据量大),又没有redis就用Map写了个简单的做缓存.
package utils
import (
"sync"
"time"
)
var Cache cacheMap
func init() {
go Cache.iniCache()
}
type cacheMap struct {
cacheMap map[string]cacheVal
cacheLock sync.Mutex
}
type cacheVal struct {
val interface{}
outTime time.Time
}
func (this *cacheMap) iniCache() {
this.cacheMap = make(map[string]cacheVal)
for {
time.Sleep(time.Second)
this.cacheLock.Lock()
for k, val := range this.cacheMap {
if val.outTime.Sub(time.Now()).Microseconds() < 0 {
delete(this.cacheMap, k)
}
}
this.cacheLock.Unlock()
}
}
func (this *cacheMap) GetCache(key string) interface{} {
this.cacheLock.Lock()
defer this.cacheLock.Unlock()
return this.cacheMap[key].val
}
func (this *cacheMap) Remove(key string){
this.cacheLock.Lock()
defer this.cacheLock.Unlock()
delete(this.cacheMap,key)
}
func (this *cacheMap) SetCache(key string, val interface{}, Time time.Duration) {
this.cacheLock.Lock()
defer this.cacheLock.Unlock()
cacheVal := cacheVal{
val: val,
outTime: time.Now().Add(Time),
}
this.cacheMap[key] = cacheVal
}
使用
func main() {
utils.Cache.SetCache("test","cache",time.Second*10)
println(utils.Cache.GetCache("test").(string))
}