zsetOperate.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package redis
  2. import (
  3. "github.com/gomodule/redigo/redis"
  4. "bet24.com/log"
  5. "strconv"
  6. )
  7. type Score_member struct {
  8. Score string
  9. Member string
  10. }
  11. //执行一个有序zset插入
  12. func Zset_ZAdd(key string, score int, member string, expire int) bool {
  13. rc := RedisClient.Get()
  14. if rc == nil {
  15. log.Release("Zset_ZAdd no redis connection")
  16. return false
  17. }
  18. defer rc.Close()
  19. _, err := rc.Do("ZADD", key, score, member)
  20. if err != nil {
  21. log.Release("Zset_ZAdd key=%v score=%v memeber=%v expire=%v err=%v", key, score, member, expire, err)
  22. return false
  23. }
  24. if expire > 0 {
  25. rc.Do("expire", key, expire)
  26. }
  27. return true
  28. }
  29. func Zset_ZInc(key string, score int, member string) bool {
  30. rc := RedisClient.Get()
  31. if rc == nil {
  32. log.Release("Zset_ZAdd no redis connection")
  33. return false
  34. }
  35. defer rc.Close()
  36. _, err := rc.Do("ZINCRBY", key, score, member)
  37. if err != nil {
  38. log.Release("Zset_ZInc key=%v score=%v member=%v err=%v", key, score, member, err)
  39. return false
  40. }
  41. return true
  42. }
  43. func Zset_ZRem(key string, member string) bool {
  44. rc := RedisClient.Get()
  45. if rc == nil {
  46. log.Release("Zset_ZRem no redis connection")
  47. return false
  48. }
  49. defer rc.Close()
  50. _, err := rc.Do("ZREM", key, member)
  51. if err != nil {
  52. log.Release("ZREM key=%v member=%v err=%v", key, member, err)
  53. return false
  54. }
  55. return true
  56. }
  57. func Zset_ZScore(key string, member string) int {
  58. rc := RedisClient.Get()
  59. if rc == nil {
  60. log.Release("Zset_ZAdd no redis connection")
  61. return 0
  62. }
  63. defer rc.Close()
  64. r, err := redis.String(rc.Do("ZSCORE", key, member))
  65. if err != nil {
  66. log.Debug("%v", err)
  67. return 0
  68. }
  69. ri, e := strconv.Atoi(r)
  70. if e != nil {
  71. log.Debug("%v", e)
  72. return 0
  73. }
  74. return ri
  75. }
  76. //读取指定zset
  77. func Zset_ZRange(key string, start, stop int, desc bool, withScore bool) ([]Score_member, bool) {
  78. rc := RedisClient.Get()
  79. if rc == nil {
  80. log.Release("Zset_ZRange no redis connection")
  81. return nil, false
  82. }
  83. defer rc.Close()
  84. cmd := "ZRANGE"
  85. if desc {
  86. cmd = "ZREVRANGE"
  87. }
  88. var rows []string
  89. var err error
  90. if withScore {
  91. rows, err = redis.Strings(rc.Do(cmd, key, start, stop, "WITHSCORES"))
  92. } else {
  93. rows, err = redis.Strings(rc.Do(cmd, key, start, stop))
  94. }
  95. if err != nil {
  96. log.Release("Zset_ZRange key=%v start=%v stop=%v desc=%v withScore=%v err=%v", key, start, stop, desc, withScore, err)
  97. return nil, false
  98. }
  99. rowsLen := len(rows) / 2
  100. if rowsLen <= 0 {
  101. log.Debug("Zset_ZRange no data")
  102. return nil, false
  103. }
  104. score_member_list := make([]Score_member, rowsLen)
  105. for i := 0; i < len(rows)-1; i += 2 {
  106. score_member_list[i/2].Member = string(rows[i])
  107. score_member_list[i/2].Score = string(rows[i+1])
  108. }
  109. return score_member_list, true
  110. }
  111. func Zset_ZRemByScore(key string, min, max int) {
  112. rc := RedisClient.Get()
  113. if rc == nil {
  114. log.Release("Zset_ZRange no redis connection")
  115. return
  116. }
  117. defer rc.Close()
  118. rc.Do("ZREMRANGEBYSCORE", key, min, max)
  119. }