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  }