go-cache 详解

简介

  • 基于内存的 K/V 存储/缓存 : (类似于Memcached),适用于单机应用程序 ,支持删除,过期,默认Cache共享锁,大量key的情况下会造成锁竞争严重。
  • 可以存储任何对象(在给定的持续时间内或永久存储),并且可以由多个goroutine安全地使用缓存。

demo

package main
 
import (
        "log"
        "time"
 
        "github.com/patrickmn/go-cache"
)
 
 
func main(){
 
        c := cache.New(30*time.Second, 10*time.Second)//new 一个cache,并且设置默认过期时间30s和清理周期10s。
 
        value, found := c.Get("test") //从cache中读取key 为test的value。
        if found {
                log.Println("found:", value)
        } else {
                log.Println("not found")
        }
 
 
        c.Set("test", "test value", cache.DefaultExpiration) //向cache中写入key/value数据,并且设置过期时间为默认,这里的默认就是我们在new cache时设置怼默认过期时间(30s)
 
 
        value, found := c.Get("test")//从cache中读取key 为test的value。显然我们在这里就能读取到数据了
        if found {
                log.Println("found:", value)
        } else {
                log.Println("not found")
        }
 
 
        time.Sleep(60*time.Second) //我们等待过期时间以后,并且达到清理周期时间
        log.Println("sleep 60s...")
        value, found = c.Get("test")//再次读取key is test的数据,显然此时我们读取不到
        if found {
                log.Println("found:", value)
        } else {
                log.Println("not found")
        }
 
}

demo2

package main
 
import (
 "fmt"
 "time"
 
 "github.com/patrickmn/go-cache"
)
 
type MyStruct struct {
 Name string
}
 
func main() {
 // 设置超时时间和清理时间
 c := cache.New(5*time.Minute, 10*time.Minute)
 
 // 设置缓存值并带上过期时间
 c.Set("foo", "bar", cache.DefaultExpiration)
 
 
 // 设置没有过期时间的KEY,这个KEY不会被自动清除,想清除使用:c.Delete("baz")
 c.Set("baz", 42, cache.NoExpiration)
 
 
 var foo interface{}
 var found bool
 // 获取值
 foo, found = c.Get("foo")
 if found {
  fmt.Println(foo)
 }
 
 var foos string
 // 获取值, 并断言
 if x, found := c.Get("foo"); found {
  foos = x.(string)
  fmt.Println(foos)
 }
 // 对结构体指针进行操作
 var my *MyStruct
 c.Set("foo", &MyStruct{Name: "NameName"}, cache.DefaultExpiration)
 if x, found := c.Get("foo"); found {
  my = x.(*MyStruct)
  // ...
 }
 fmt.Println(my)
}
 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×