memcached_storage.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package distcache
  2. import (
  3. "time"
  4. "github.com/bradfitz/gomemcache/memcache"
  5. )
  6. type memcacheStorage struct {
  7. c *memcache.Client
  8. }
  9. func newMemcacheStorage(connStr string) *memcacheStorage {
  10. return &memcacheStorage{
  11. c: memcache.New(connStr),
  12. }
  13. }
  14. func newItem(sid string, data []byte, expire int32) *memcache.Item {
  15. return &memcache.Item{
  16. Key: sid,
  17. Value: data,
  18. Expiration: expire,
  19. }
  20. }
  21. // Set sets value to given key in the cache.
  22. func (s *memcacheStorage) Put(key string, val interface{}, expires time.Duration) error {
  23. item := &cachedItem{Val: val}
  24. bytes, err := encodeGob(item)
  25. if err != nil {
  26. return err
  27. }
  28. memcacheItem := newItem(key, bytes, int32(expires))
  29. s.c.Add(memcacheItem)
  30. return nil
  31. }
  32. // Get gets value by given key in the cache.
  33. func (s *memcacheStorage) Get(key string) (interface{}, error) {
  34. i, err := s.c.Get(key)
  35. if err != nil {
  36. return nil, err
  37. }
  38. item := &cachedItem{}
  39. err = decodeGob(i.Value, item)
  40. if err != nil {
  41. return nil, err
  42. }
  43. return item.Val, nil
  44. }
  45. // Delete delete a key from the cache
  46. func (s *memcacheStorage) Delete(key string) error {
  47. return s.c.Delete(key)
  48. }