Kaynağa Gözat

add memory cache

Chuanjian Wang 7 yıl önce
ebeveyn
işleme
3984f13c76
1 değiştirilmiş dosya ile 74 ekleme ve 0 silme
  1. 74 0
      cache/memory.go

+ 74 - 0
cache/memory.go

@@ -0,0 +1,74 @@
+package cache
+
+import (
+	"sync"
+	"time"
+)
+
+//Memory struct contains *memcache.Client
+type Memory struct {
+	sync.Mutex
+
+	data map[string]*data
+}
+
+type data struct {
+	Data    interface{}
+	Expired time.Time
+}
+
+//NewMemory create new memcache
+func NewMemory() *Memory {
+	return &Memory{
+		data: map[string]*data{},
+	}
+}
+
+//Get return cached value
+func (mem *Memory) Get(key string) interface{} {
+	if ret, ok := mem.data[key]; ok {
+		if ret.Expired.Before(time.Now()) {
+			mem.deleteKey(key)
+			return nil
+		}
+		return ret.Data
+	}
+	return nil
+}
+
+// IsExist check value exists in memcache.
+func (mem *Memory) IsExist(key string) bool {
+	if ret, ok := mem.data[key]; ok {
+		if ret.Expired.Before(time.Now()) {
+			mem.deleteKey(key)
+			return false
+		}
+		return true
+	}
+	return false
+}
+
+//Set cached value with key and expire time.
+func (mem *Memory) Set(key string, val interface{}, timeout time.Duration) (err error) {
+	mem.Lock()
+	defer mem.Unlock()
+
+	mem.data[key] = &data{
+		Data:    val,
+		Expired: time.Now().Add(timeout),
+	}
+	return nil
+}
+
+//Delete delete value in memcache.
+func (mem *Memory) Delete(key string) error {
+	return mem.deleteKey(key)
+}
+
+// deleteKey
+func (mem *Memory) deleteKey(key string) error {
+	mem.Lock()
+	defer mem.Unlock()
+	delete(mem.data, key)
+	return nil
+}