From 9cef3167e123c3fcabee092ec4284ea792094ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Sat, 7 May 2022 01:34:37 +0800 Subject: [PATCH] update memcached --- memcached_cache.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 memcached_cache.go diff --git a/memcached_cache.go b/memcached_cache.go new file mode 100644 index 0000000..d9ac53e --- /dev/null +++ b/memcached_cache.go @@ -0,0 +1,57 @@ +package gocache + +import ( + "encoding/json" + "github.com/bradfitz/gomemcache/memcache" +) + +// MemcachedCache https://github.com/bradfitz/gomemcache +type MemcachedCache struct { + db *Memcached // 驱动 + GetterString GttStringFunc // 不存在的操作 + GetterInterface GttInterfaceFunc // 不存在的操作 +} + +// NewCache 实例化 +func (m *Memcached) NewCache() *MemcachedCache { + return &MemcachedCache{db: m} +} + +// GetString 缓存操作 +func (mc *MemcachedCache) GetString(key string) (ret string) { + + f := func() string { + return mc.GetterString() + } + + // 如果不存在,则调用GetterString + ret, err := mc.db.Get(key) + + if err == memcache.ErrCacheMiss { + mc.db.Set(key, []byte(f())) + ret, _ = mc.db.Get(key) + } + + return +} + +// GetInterface 缓存操作 +func (mc *MemcachedCache) GetInterface(key string, result interface{}) { + + f := func() string { + marshal, _ := json.Marshal(mc.GetterInterface()) + return string(marshal) + } + + // 如果不存在,则调用GetterInterface + get, err := mc.db.Get(key) + + if err == memcache.ErrCacheMiss { + mc.db.Set(key, []byte(f())) + get, _ = mc.db.Get(key) + } + + err = json.Unmarshal([]byte(get), result) + + return +}