标签:golang return mem Memory Golang memcache key time data
如果有使用内存存一些简单数据的功能,可以实现下面这样的带有过期时间的内存类
内存中存储key-value,并且可以设置过期时间
package tools 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 { mem.deleteKey(key) return nil } // deleteKey func (mem *Memory) deleteKey(key string) { mem.Lock() defer mem.Unlock() delete(mem.data, key) } // clean all data func (mem *Memory) Clean() { mem.Lock() defer mem.Unlock() mem.data = map[string]*data{} }
使用方法
mem := NewMemory() mem.Set("name", "livechat", time.Duration(10)*time.Second) time.Sleep(time.Duration(2) * time.Second) name := mem.Get("name")
标签:golang,return,mem,Memory,Golang,memcache,key,time,data 来源: https://www.cnblogs.com/taoshihan/p/16504015.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。