memcache.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package cache
  2. import (
  3. "encoding/json"
  4. "time"
  5. "github.com/bradfitz/gomemcache/memcache"
  6. )
  7. //Memcache struct contains *memcache.Client
  8. type Memcache struct {
  9. conn *memcache.Client
  10. }
  11. //NewMemcache create new memcache
  12. func NewMemcache(server ...string) *Memcache {
  13. mc := memcache.New(server...)
  14. return &Memcache{mc}
  15. }
  16. //Get return cached value
  17. func (mem *Memcache) Get(key string) interface{} {
  18. var err error
  19. var item *memcache.Item
  20. if item, err = mem.conn.Get(key); err != nil {
  21. return nil
  22. }
  23. var result interface{}
  24. if err = json.Unmarshal(item.Value, &result); err != nil {
  25. return nil
  26. }
  27. return result
  28. }
  29. // IsExist check value exists in memcache.
  30. func (mem *Memcache) IsExist(key string) bool {
  31. if _, err := mem.conn.Get(key); err != nil {
  32. return false
  33. }
  34. return true
  35. }
  36. //Set cached value with key and expire time.
  37. func (mem *Memcache) Set(key string, val interface{}, timeout time.Duration) (err error) {
  38. var data []byte
  39. if data, err = json.Marshal(val); err != nil {
  40. return err
  41. }
  42. item := &memcache.Item{Key: key, Value: data, Expiration: int32(timeout / time.Second)}
  43. return mem.conn.Set(item)
  44. }
  45. //Delete delete value in memcache.
  46. func (mem *Memcache) Delete(key string) error {
  47. return mem.conn.Delete(key)
  48. }