memcache.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package stat
  2. import (
  3. "context"
  4. "fmt"
  5. favmdl "go-common/app/service/main/favorite/model"
  6. "go-common/library/cache/memcache"
  7. "go-common/library/log"
  8. )
  9. const (
  10. _folderStat = "ft_%s_%d" // key:ft_{mid%100}_{fid},value:{*FodlerStat}.pb
  11. )
  12. // folderStatMcKey
  13. func folderStatMcKey(table string, fid int64) string {
  14. return fmt.Sprintf(_folderStat, table, fid)
  15. }
  16. // SetFolderStatMc add folder stat mc cache.
  17. func (d *Dao) SetFolderStatMc(c context.Context, id int64, s *favmdl.Folder) (err error) {
  18. fid, table := hit(id)
  19. conn := d.mc.Get(c)
  20. defer conn.Close()
  21. item := &memcache.Item{Key: folderStatMcKey(table, fid), Object: s, Flags: memcache.FlagProtobuf, Expiration: d.mcExpire}
  22. if err = conn.Set(item); err != nil {
  23. log.Error("conn.Set(%s) error(%v)", folderStatMcKey(table, fid), err)
  24. }
  25. return
  26. }
  27. // FolderStatMc return one folder stat from mc.
  28. func (d *Dao) FolderStatMc(c context.Context, id int64) (f *favmdl.Folder, err error) {
  29. fid, table := hit(id)
  30. var (
  31. key = folderStatMcKey(table, fid)
  32. item *memcache.Item
  33. conn = d.mc.Get(c)
  34. )
  35. defer conn.Close()
  36. if item, err = conn.Get(key); err != nil {
  37. if err == memcache.ErrNotFound {
  38. err = nil
  39. } else {
  40. log.Error("memcache.Get(%s) error(%v)", key, err)
  41. }
  42. return
  43. }
  44. f = new(favmdl.Folder)
  45. if err = conn.Scan(item, f); err != nil {
  46. log.Error("conn.Scan(%s) error(%v)", item.Value, err)
  47. f = nil
  48. }
  49. return
  50. }