cache.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package mobile
  2. import (
  3. "context"
  4. "fmt"
  5. "go-common/app/interface/main/app-wall/model/mobile"
  6. "go-common/library/cache/memcache"
  7. "go-common/library/log"
  8. )
  9. const (
  10. _prefix = "mobiles_user_%v"
  11. )
  12. func keyMobile(usermob string) string {
  13. return fmt.Sprintf(_prefix, usermob)
  14. }
  15. // AddMobileCache
  16. func (d *Dao) AddMobileCache(c context.Context, usermob string, m []*mobile.Mobile) (err error) {
  17. var (
  18. key = keyMobile(usermob)
  19. conn = d.mc.Get(c)
  20. )
  21. if err = conn.Set(&memcache.Item{Key: key, Object: m, Flags: memcache.FlagJSON, Expiration: d.expire}); err != nil {
  22. log.Error("addMobileCache d.mc.Set(%s,%v) error(%v)", key, m, err)
  23. }
  24. conn.Close()
  25. return
  26. }
  27. // MobileCache
  28. func (d *Dao) MobileCache(c context.Context, usermob string) (m []*mobile.Mobile, err error) {
  29. var (
  30. key = keyMobile(usermob)
  31. conn = d.mc.Get(c)
  32. r *memcache.Item
  33. )
  34. defer conn.Close()
  35. if r, err = conn.Get(key); err != nil {
  36. if err == memcache.ErrNotFound {
  37. err = nil
  38. return
  39. }
  40. log.Error("mobileCache MemchDB.Get(%s) error(%v)", key, err)
  41. return
  42. }
  43. if err = conn.Scan(r, &m); err != nil {
  44. log.Error("r.Scan(%s) error(%v)", r.Value, err)
  45. }
  46. return
  47. }
  48. // DeleteMobileCache
  49. func (d *Dao) DeleteMobileCache(c context.Context, usermob string) (err error) {
  50. var (
  51. key = keyMobile(usermob)
  52. conn = d.mc.Get(c)
  53. )
  54. defer conn.Close()
  55. if err = conn.Delete(key); err != nil {
  56. if err == memcache.ErrNotFound {
  57. err = nil
  58. return
  59. }
  60. log.Error("mobileCache MemchDB.Delete(%s) error(%v)", key, err)
  61. return
  62. }
  63. return
  64. }
  65. // UpdateMobileCache
  66. func (d *Dao) UpdateMobileCache(c context.Context, usermob string, m *mobile.Mobile) (err error) {
  67. var (
  68. ms []*mobile.Mobile
  69. mobiles []*mobile.Mobile
  70. uproductid = map[string]struct{}{}
  71. )
  72. if ms, err = d.MobileCache(c, usermob); err != nil && len(ms) > 0 {
  73. log.Error("d.MobileCache error(%v)", err)
  74. return
  75. }
  76. if len(ms) > 0 {
  77. for _, ml := range ms {
  78. tmp := &mobile.Mobile{}
  79. *tmp = *ml
  80. if tmp.Productid == m.Productid {
  81. tmp = m
  82. if m.Threshold == 0 {
  83. tmp.Threshold = ml.Threshold
  84. }
  85. uproductid[m.Productid] = struct{}{}
  86. }
  87. mobiles = append(mobiles, tmp)
  88. }
  89. if _, ok := uproductid[m.Productid]; !ok {
  90. mobiles = append(mobiles, m)
  91. }
  92. if err = d.AddMobileCache(c, usermob, mobiles); err != nil {
  93. log.Error("d.AddMobileCache error(%v)", err)
  94. return
  95. }
  96. }
  97. return
  98. }
  99. // UpdateMobileFlowCache
  100. func (d *Dao) UpdateMobileFlowCache(c context.Context, usermob string, m *mobile.Mobile) (err error) {
  101. var (
  102. ms []*mobile.Mobile
  103. mobiles []*mobile.Mobile
  104. )
  105. if ms, err = d.MobileCache(c, usermob); err != nil && len(ms) > 0 {
  106. log.Error("d.MobileCache error(%v)", err)
  107. return
  108. }
  109. if len(ms) > 0 {
  110. for _, ml := range ms {
  111. tmp := &mobile.Mobile{}
  112. *tmp = *ml
  113. if tmp.Productid == m.Productid {
  114. tmp.Threshold = m.Threshold
  115. }
  116. mobiles = append(mobiles, tmp)
  117. }
  118. if err = d.AddMobileCache(c, usermob, mobiles); err != nil {
  119. log.Error("d.AddMobileCache error(%v)", err)
  120. return
  121. }
  122. }
  123. return
  124. }