一个用于golang的内存缓存库。它支持多种淘汰策略:LRU、LFU、ARC。
用于 golang 的缓存库。它支持可过期缓存、LFU、LRU 和 ARC。
支持可过期缓存、LFU、LRU 和 ARC。
并发安全。
支持事件处理器,可驱逐、清除和添加条目。(可选)
如果缓存不存在,则自动加载。(可选)
$ go get github.com/bluele/gcachepackage main
import (
"github.com/bluele/gcache"
"fmt"
)
func main() {
gc := gcache.New(20).
LRU().
Build()
gc.Set("key", "ok")
value, err := gc.Get("key")
if err != nil {
panic(err)
}
fmt.Println("Get:", value)
}Get: okpackage main
import (
"github.com/bluele/gcache"
"fmt"
"time"
)
func main() {
gc := gcache.New(20).
LRU().
Build()
gc.SetWithExpire("key", "ok", time.Second*10)
value, _ := gc.Get("key")
fmt.Println("Get:", value)
// Wait for value to expire
time.Sleep(time.Second*10)
value, err := gc.Get("key")
if err != nil {
panic(err)
}
fmt.Println("Get:", value)
}Get: ok
// 10 seconds later, new attempt:
panic: ErrKeyNotFoundpackage main
import (
"github.com/bluele/gcache"
"fmt"
)
func main() {
gc := gcache.New(20).
LRU().
LoaderFunc(func(key interface{}) (interface{}, error) {
return "ok", nil
}).
Build()
value, err := gc.Get("key")
if err != nil {
panic(err)
}
fmt.Println("Get:", value)
}Get: ok…Get: ok
evicted key: key
Get: ok
purged key: key首先丢弃最不经常使用的条目。
func main() {
// size: 10
gc := gcache.New(10).
LFU().
Build()
gc.Set("key", "value")
} func main() {
// size: 10
gc := gcache.New(10).
LRU().
Build()
gc.Set("key", "value")
}暂无开放 Issues,或尚未同步最近议题。