redis.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package stat
  2. import (
  3. "context"
  4. "strconv"
  5. "go-common/library/cache/redis"
  6. "go-common/library/log"
  7. )
  8. const (
  9. _ipBanKey = "ipb_"
  10. _buvidBanKey = "bvb_"
  11. )
  12. func ipBanKey(id int64, ip string) (key string) {
  13. key = _ipBanKey + strconv.FormatInt(id, 10) + ip
  14. return
  15. }
  16. func buvidBanKey(id, mid int64, ip, buvid string) (key string) {
  17. key = _buvidBanKey + strconv.FormatInt(id, 10) + ip + buvid
  18. if mid != 0 {
  19. key += strconv.FormatInt(mid, 10)
  20. }
  21. return
  22. }
  23. // IPBan intercepts illegal views.
  24. func (d *Dao) IPBan(c context.Context, id int64, ip string) (ban bool) {
  25. var (
  26. err error
  27. exist bool
  28. key = ipBanKey(id, ip)
  29. conn = d.redis.Get(c)
  30. )
  31. defer conn.Close()
  32. if exist, err = redis.Bool(conn.Do("EXISTS", key)); err != nil {
  33. log.Error("conn.Do(EXISTS, %s) error(%+v)", key, err)
  34. return
  35. }
  36. if exist {
  37. ban = true
  38. return
  39. }
  40. if err = conn.Send("SET", key, "1"); err != nil {
  41. log.Error("conn.Send(EXPIRE, %s) error(%+v)", key, err)
  42. return
  43. }
  44. if err = conn.Send("EXPIRE", key, d.ipExpire); err != nil {
  45. log.Error("conn.Send(EXPIRE, %s) error(%+v)", key, err)
  46. return
  47. }
  48. if err = conn.Flush(); err != nil {
  49. log.Error("conn.Flush error(%+v)", err)
  50. return
  51. }
  52. for i := 0; i < 2; i++ {
  53. if _, err = conn.Receive(); err != nil {
  54. log.Error("conn.Receive() error(%+v)", err)
  55. return
  56. }
  57. }
  58. return
  59. }
  60. // BuvidBan intercepts illegal views.
  61. func (d *Dao) BuvidBan(c context.Context, id, mid int64, ip, buvid string) (ban bool) {
  62. var (
  63. err error
  64. exist bool
  65. key = buvidBanKey(id, mid, ip, buvid)
  66. conn = d.redis.Get(c)
  67. )
  68. defer conn.Close()
  69. if exist, err = redis.Bool(conn.Do("EXISTS", key)); err != nil {
  70. log.Error("conn.Do(EXISTS, %s) error(%+v)", key, err)
  71. return
  72. }
  73. if exist {
  74. ban = true
  75. return
  76. }
  77. if err = conn.Send("SET", key, "1"); err != nil {
  78. log.Error("conn.Send(EXPIRE, %s) error(%+v)", key, err)
  79. return
  80. }
  81. if err = conn.Send("EXPIRE", key, d.buvidExpire); err != nil {
  82. log.Error("conn.Send(EXPIRE, %s) error(%+v)", key, err)
  83. return
  84. }
  85. if err = conn.Flush(); err != nil {
  86. log.Error("conn.Flush error(%+v)", err)
  87. return
  88. }
  89. for i := 0; i < 2; i++ {
  90. if _, err = conn.Receive(); err != nil {
  91. log.Error("conn.Receive() error(%+v)", err)
  92. return
  93. }
  94. }
  95. return
  96. }