🗃 Generic cache use and cache manage. Provide a unified usage API by packaging various commonly used drivers. Support File, Memory, Redis, Memcached and more. Go 通用的缓存使用库,通过包装各种常用的驱动,来提供统一的使用API,便于使用。
Generic cache use and cache manager for golang.
Provide a unified usage API by packaging various commonly used drivers.
All cache driver implemented the
cache.Cache
interface. So, You can add any custom driver.
Packaged Drivers:
goredis
https://github.com/go-redis/redis
redis
https://github.com/gomodule/redigo
memcached
https://github.com/bradfitz/gomemcache
buntdb
https://github.com/tidwall/buntdb
boltdb
https://github.com/etcd-io/bbolt
badger
https://github.com/dgraph-io/badger
nutsdb
https://github.com/xujiajun/nutsdb
goleveldb
https://github.com/syndtr/goleveldb
gcache
https://github.com/bluele/gcache
gocache
https://github.com/patrickmn/go-cache
bigcache
https://github.com/allegro/bigcache
Internal:
Notice: The built-in implementation is relatively simple and is not recommended for production environments; the production environment recommends using the third-party drivers listed above.
The package supports 3 last Go versions and requires a Go version with modules support.
go get github.com/gookit/cache
All cache driver implemented the cache.Cache
interface. So, You can add any custom driver.
type Cache interface {
// basic operation
Has(key string) bool
Get(key string) any
Set(key string, val any, ttl time.Duration) (err error)
Del(key string) error
// multi operation
GetMulti(keys []string) map[string]any
SetMulti(values map[string]any, ttl time.Duration) (err error)
DelMulti(keys []string) error
// clear and close
Clear() error
Close() error
}
package main
import (
"fmt"
"github.com/gookit/cache"
"github.com/gookit/cache/gcache"
"github.com/gookit/cache/gocache"
"github.com/gookit/cache/goredis"
"github.com/gookit/cache/redis"
)
func main() {
// register one(or some) cache driver
cache.Register(cache.DvrFile, cache.NewFileCache(""))
// cache.Register(cache.DvrMemory, cache.NewMemoryCache())
cache.Register(gcache.Name, gcache.New(1000))
cache.Register(gocache.Name, gocache.NewGoCache(cache.OneDay, cache.FiveMinutes))
cache.Register(redis.Name, redis.Connect("127.0.0.1:6379", "", 0))
cache.Register(goredis.Name, goredis.Connect("127.0.0.1:6379", "", 0))
// setting default driver name
cache.DefaultUse(gocache.Name)
// quick use.(it is default driver)
//
// set
cache.Set("name", "cache value", cache.TwoMinutes)
// get
val := cache.Get("name")
// del
cache.Del("name")
// get: "cache value"
fmt.Print(val)
// More ...
// fc := cache.Driver(gcache.Name)
// fc.Set("key", "value", 10)
// fc.Get("key")
}
gords := goredis.Connect("127.0.0.1:6379", "", 0)
gords.WithOptions(cache.WithPrefix("cache_"), cache.WithEncode(true))
cache.Register(goredis.Name, gords)
// set
// real key is: "cache_name"
cache.Set("name", "cache value", cache.TwoMinutes)
// get: "cache value"
val := cache.Get("name")
MIT