Linux 拨号vps windows公众号手机端

go怎么实现本地缓存

lewis 8年前 (2017-11-01) 阅读数 6 #程序编程
文章标签 go

在Go语言中,可以使用`sync.Map`或者`map`来实现本地缓存。
1. 使用`sync.Map`实现本地缓存:

packagemain
import(
"sync"
"time"
)
typeCachestruct{
datasync.Map
}
func(c*Cache)Get(keystring)(interface{},bool){
value,ok:=c.data.Load(key)
ifok{
returnvalue,true
}
returnnil,false
}
func(c*Cache)Set(keystring,valueinterface{}){
c.data.Store(key,value)
}
func(c*Cache)Delete(keystring){
c.data.Delete(key)
}
funcmain(){
cache:=&Cache{}
cache.Set("key1","value1")
cache.Set("key2","value2")
value,ok:=cache.Get("key1")
ifok{
println(value.(string))//输出:value1
}
cache.Delete("key2")
value,ok=cache.Get("key2")
if!ok{
println("key2notfound")//输出:key2notfound
}
}

2. 使用`map`实现本地缓存:

packagemain
import"time"
typeCachestruct{
datamap[string]interface{}
expirymap[string]time.Time
}
func(c*Cache)Get(keystring)(interface{},bool){
value,ok:=c.data[key]
ifok{
expiryTime:=c.expiry[key]
ifexpiryTime.After(time.Now()){
returnvalue,true
}else{
delete(c.data,key)
delete(c.expiry,key)
returnnil,false
}
}
returnnil,false
}
func(c*Cache)Set(keystring,valueinterface{},expirytime.Duration){
c.data[key]=value
c.expiry[key]=time.Now().Add(expiry)
}
func(c*Cache)Delete(keystring){
delete(c.data,key)
delete(c.expiry,key)
}
funcmain(){
cache:=&Cache{
data:make(map[string]interface{}),
expiry:make(map[string]time.Time),
}
cache.Set("key1","value1",time.Second*10)
cache.Set("key2","value2",time.Second*20)
value,ok:=cache.Get("key1")
ifok{
println(value.(string))//输出:value1
}
time.Sleep(time.Second*15)
value,ok=cache.Get("key1")
if!ok{
println("key1notfound")//输出:key1notfound
}
}

以上是两种常见的在Go语言中实现本地缓存的方法,选择使用哪种取决于你对并发安全性和性能的需求。

版权声明

本文仅代表作者观点,不代表米安网络立场。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门