redis.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package dao
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "go-common/app/interface/main/space/model"
  7. "go-common/library/cache/redis"
  8. "go-common/library/log"
  9. )
  10. func keyUpArt(mid int64) string {
  11. return fmt.Sprintf("%s_%d", "uat", mid)
  12. }
  13. func keyUpArc(mid int64) string {
  14. return fmt.Sprintf("%s_%d", "uar", mid)
  15. }
  16. // UpArtCache get up article cache.
  17. func (d *Dao) UpArtCache(c context.Context, mid int64) (data *model.UpArtStat, err error) {
  18. var (
  19. value []byte
  20. key = keyUpArt(mid)
  21. conn = d.redis.Get(c)
  22. )
  23. defer conn.Close()
  24. if value, err = redis.Bytes(conn.Do("GET", key)); err != nil {
  25. if err == redis.ErrNil {
  26. err = nil
  27. } else {
  28. log.Error("conn.Do(GET, %s) error(%v)", key, err)
  29. }
  30. return
  31. }
  32. data = new(model.UpArtStat)
  33. if err = json.Unmarshal(value, &data); err != nil {
  34. log.Error("json.Unmarshal(%v) error(%v)", value, err)
  35. }
  36. return
  37. }
  38. // SetUpArtCache set up article cache.
  39. func (d *Dao) SetUpArtCache(c context.Context, mid int64, data *model.UpArtStat) (err error) {
  40. var (
  41. bs []byte
  42. key = keyUpArt(mid)
  43. conn = d.redis.Get(c)
  44. )
  45. defer conn.Close()
  46. if bs, err = json.Marshal(data); err != nil {
  47. log.Error("json.Marshal(%v) error (%v)", data, err)
  48. return
  49. }
  50. err = setKvCache(conn, key, bs, d.upArtExpire)
  51. return
  52. }
  53. // UpArcCache get up archive cache.
  54. func (d *Dao) UpArcCache(c context.Context, mid int64) (data *model.UpArcStat, err error) {
  55. var (
  56. value []byte
  57. key = keyUpArc(mid)
  58. conn = d.redis.Get(c)
  59. )
  60. defer conn.Close()
  61. if value, err = redis.Bytes(conn.Do("GET", key)); err != nil {
  62. if err == redis.ErrNil {
  63. err = nil
  64. } else {
  65. log.Error("conn.Do(GET, %s) error(%v)", key, err)
  66. }
  67. return
  68. }
  69. data = new(model.UpArcStat)
  70. if err = json.Unmarshal(value, &data); err != nil {
  71. log.Error("json.Unmarshal(%v) error(%v)", value, err)
  72. }
  73. return
  74. }
  75. // SetUpArcCache set up archive cache.
  76. func (d *Dao) SetUpArcCache(c context.Context, mid int64, data *model.UpArcStat) (err error) {
  77. var (
  78. bs []byte
  79. key = keyUpArc(mid)
  80. conn = d.redis.Get(c)
  81. )
  82. defer conn.Close()
  83. if bs, err = json.Marshal(data); err != nil {
  84. log.Error("json.Marshal(%v) error (%v)", data, err)
  85. return
  86. }
  87. err = setKvCache(conn, key, bs, d.upArcExpire)
  88. return
  89. }
  90. func setKvCache(conn redis.Conn, key string, value []byte, expire int32) (err error) {
  91. if err = conn.Send("SET", key, value); err != nil {
  92. log.Error("conn.Send(SET, %s, %s) error(%v)", key, string(value), err)
  93. return
  94. }
  95. if err = conn.Send("EXPIRE", key, expire); err != nil {
  96. log.Error("conn.Send(Expire, %s, %d) error(%v)", key, expire, err)
  97. return
  98. }
  99. if err = conn.Flush(); err != nil {
  100. log.Error("conn.Flush error(%v)", err)
  101. return
  102. }
  103. for i := 0; i < 2; i++ {
  104. if _, err = conn.Receive(); err != nil {
  105. log.Error("conn.Receive() error(%v)", err)
  106. return
  107. }
  108. }
  109. return
  110. }