mc_limiter.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package dao
  2. import (
  3. "context"
  4. "strconv"
  5. "go-common/app/interface/main/dm2/model"
  6. "go-common/library/cache/memcache"
  7. "go-common/library/log"
  8. )
  9. const (
  10. _prefixDmDailyLimit = "dm_daily_limit_"
  11. )
  12. func keyDmDailyLimit(mid int64) string {
  13. return _prefixDmDailyLimit + strconv.FormatInt(mid, 10)
  14. }
  15. // SetDmDailyLimitCache .
  16. func (d *Dao) SetDmDailyLimitCache(c context.Context, mid int64, limiter *model.DailyLimiter) (err error) {
  17. var (
  18. conn = d.dmSegMC.Get(c)
  19. key = keyDmDailyLimit(mid)
  20. )
  21. defer conn.Close()
  22. item := &memcache.Item{
  23. Key: key,
  24. Object: limiter,
  25. Flags: memcache.FlagJSON,
  26. Expiration: d.dmLimiterMCExpire,
  27. }
  28. if err = conn.Set(item); err != nil {
  29. log.Error("conn.Set(%v) error(%v)", item, err)
  30. }
  31. return
  32. }
  33. // GetDmDailyLimitCache .
  34. func (d *Dao) GetDmDailyLimitCache(c context.Context, mid int64) (limiter *model.DailyLimiter, err error) {
  35. var (
  36. conn = d.dmSegMC.Get(c)
  37. key = keyDmDailyLimit(mid)
  38. rp *memcache.Item
  39. )
  40. defer conn.Close()
  41. if rp, err = conn.Get(key); err != nil {
  42. if err == memcache.ErrNotFound {
  43. limiter = nil
  44. err = nil
  45. } else {
  46. log.Error("mc.Get(%s) error(%v)", key, err)
  47. }
  48. return
  49. }
  50. limiter = &model.DailyLimiter{}
  51. if err = conn.Scan(rp, &limiter); err != nil {
  52. log.Error("mc.Scan() error(%v)", err)
  53. }
  54. return
  55. }