github.com/yusys-cloud/go-jsonstore-rest@v0.0.0-20230228115429-0a54aa4a27a6/rest/storage_cache.go (about) 1 // Author: yangzq80@gmail.com 2 // Date: 2023/2/28 3 package rest 4 5 import "encoding/json" 6 7 // 通用 key:value 对象存储 8 func (s *Storage) CachePut(key string, val interface{}) { 9 s.bucket(CACHE_BUCKET).Set("b-c-"+key, val) 10 s.savePersistent(CACHE_BUCKET) 11 } 12 func (s *Storage) CacheGet(key string, val *interface{}) { 13 var rs interface{} 14 s.bucket(CACHE_BUCKET).Get("b-c-"+key, &rs) 15 16 if rs != nil { 17 body, _ := json.Marshal(rs) 18 json.Unmarshal(body, val) 19 } 20 } 21 22 // 通用 key:value 字符串类型kv存储 23 func (s *Storage) CachePutString(category string, kvKey string, kvValue string) { 24 25 var vObj interface{} 26 s.CacheGet(category, &vObj) 27 val := make(map[string]interface{}) 28 if vObj != nil { 29 val = vObj.(map[string]interface{}) 30 } 31 val[kvKey] = kvValue 32 s.CachePut(category, val) 33 } 34 func (s *Storage) CacheGetString(category string, kvKey string) string { 35 var vObj interface{} 36 s.CacheGet(category, &vObj) 37 if vObj == nil { 38 return "" 39 } 40 kv := vObj.(map[string]interface{}) 41 if kv == nil || kv[kvKey] == nil { 42 return "" 43 } 44 return kv[kvKey].(string) 45 } 46 47 func (s *Storage) FIFO(key string, val interface{}, size int) { 48 resp := s.ReadAllSort(CACHE_BUCKET, key) 49 if resp.Data.Total >= size { 50 s.Delete(CACHE_BUCKET, resp.Data.Items.([]interface{})[size-1].(map[string]interface{})["k"].(string)) 51 } 52 s.Create(CACHE_BUCKET, key, val) 53 }