| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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
- }
|