memory.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package cache
  2. import (
  3. "sync"
  4. "time"
  5. )
  6. //Memory struct contains *memcache.Client
  7. type Memory struct {
  8. sync.Mutex
  9. data map[string]*data
  10. }
  11. type data struct {
  12. Data interface{}
  13. Expired time.Time
  14. }
  15. //NewMemory create new memcache
  16. func NewMemory() *Memory {
  17. return &Memory{
  18. data: map[string]*data{},
  19. }
  20. }
  21. //Get return cached value
  22. func (mem *Memory) Get(key string) interface{} {
  23. if ret, ok := mem.data[key]; ok {
  24. if ret.Expired.Before(time.Now()) {
  25. mem.deleteKey(key)
  26. return nil
  27. }
  28. return ret.Data
  29. }
  30. return nil
  31. }
  32. // IsExist check value exists in memcache.
  33. func (mem *Memory) IsExist(key string) bool {
  34. if ret, ok := mem.data[key]; ok {
  35. if ret.Expired.Before(time.Now()) {
  36. mem.deleteKey(key)
  37. return false
  38. }
  39. return true
  40. }
  41. return false
  42. }
  43. //Set cached value with key and expire time.
  44. func (mem *Memory) Set(key string, val interface{}, timeout time.Duration) (err error) {
  45. mem.Lock()
  46. defer mem.Unlock()
  47. mem.data[key] = &data{
  48. Data: val,
  49. Expired: time.Now().Add(timeout),
  50. }
  51. return nil
  52. }
  53. //Delete delete value in memcache.
  54. func (mem *Memory) Delete(key string) error {
  55. return mem.deleteKey(key)
  56. }
  57. // deleteKey
  58. func (mem *Memory) deleteKey(key string) error {
  59. mem.Lock()
  60. defer mem.Unlock()
  61. delete(mem.data, key)
  62. return nil
  63. }