redis操作
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
2.9 KiB

  1. package redis
  2. import (
  3. "errors"
  4. redisdb "github.com/gomodule/redigo/redis"
  5. )
  6. /*
  7. * 存值
  8. * key
  9. * value
  10. * 2021/08/31
  11. */
  12. func SAdd(key string, value interface{}) (int64, error) {
  13. c := GetConn()
  14. reply, err := c.Do("SADD", key, value)
  15. CloseConn(c)
  16. if err != nil {
  17. return 0, err
  18. } else {
  19. return redisdb.Int64(reply, nil)
  20. }
  21. }
  22. /*
  23. * 删除hash值
  24. */
  25. func SRem(key, value interface{}) (int64, error) {
  26. c := GetConn()
  27. reply, err := c.Do("SREM", key, value)
  28. CloseConn(c)
  29. if err != nil {
  30. return 0, err
  31. } else {
  32. return redisdb.Int64(reply, nil)
  33. }
  34. }
  35. /**
  36. * 集合键是否存在
  37. * key
  38. * field
  39. */
  40. func SIsmember(key, value interface{}) (int64, error) {
  41. c := GetConn()
  42. reply, err := c.Do("SISMEMBER", key, value)
  43. CloseConn(c)
  44. if err != nil {
  45. return 0, err
  46. } else {
  47. return redisdb.Int64(reply, nil)
  48. }
  49. }
  50. /**
  51. * 集合成员数量
  52. */
  53. func SCard(key interface{}) (int64, error) {
  54. c := GetConn()
  55. reply, err := c.Do("SCard", key)
  56. CloseConn(c)
  57. if err != nil {
  58. return 0, err
  59. } else {
  60. return redisdb.Int64(reply, nil)
  61. }
  62. }
  63. //hash取值,返回[]byte
  64. func SMembers(key string) ([]byte, error) {
  65. c := GetConn()
  66. ret, err := c.Do("SMEMBERS", key)
  67. reply := make([]byte, 0)
  68. if err == nil {
  69. reply, err = redisdb.Bytes(ret, err)
  70. }
  71. CloseConn(c)
  72. return reply, err
  73. }
  74. func ZAdd(key, score, member string) (int64, error) {
  75. c := GetConn()
  76. reply, err := c.Do("ZADD", key, score, member)
  77. CloseConn(c)
  78. if err != nil {
  79. return 0, err
  80. } else {
  81. return redisdb.Int64(reply, nil)
  82. }
  83. }
  84. func ZIncrBy(key, inc, member string) (int64, error) {
  85. c := GetConn()
  86. reply, err := c.Do("ZINCRBY", key, inc, member)
  87. CloseConn(c)
  88. if err != nil {
  89. return 0, err
  90. } else {
  91. return redisdb.Int64(reply, nil)
  92. }
  93. }
  94. func ZRange(key string, start, stop int64) ([]map[string]string, error) {
  95. c := GetConn()
  96. defer CloseConn(c)
  97. values, err := redisdb.Values(c.Do("ZRANGE", key, start, stop, "WITHSCORES"))
  98. if err != nil {
  99. return nil, err
  100. }
  101. if len(values)%2 != 0 {
  102. return nil, errors.New("redigo: ZRange expects even number of values result")
  103. }
  104. var l []map[string]string
  105. for i := 0; i < len(values); i += 2 {
  106. key, okKey := values[i].([]byte)
  107. value, okValue := values[i+1].([]byte)
  108. if !okKey || !okValue {
  109. return nil, errors.New("redigo: ZRange key not a bulk string value")
  110. }
  111. l = append(l, map[string]string{
  112. "member": string(key),
  113. "score": string(value),
  114. })
  115. }
  116. return l, nil
  117. }
  118. func ZScan(key, field string, len int64) ([]string, error) {
  119. c := GetConn()
  120. defer CloseConn(c)
  121. zscanResult, err := redisdb.Values(c.Do("ZSCAN", key, "0", "MATCH", field, "COUNT", len))
  122. if err != nil {
  123. return nil, err
  124. }
  125. var cursor int
  126. var membersAndScores []string
  127. var member []string
  128. redisdb.Scan(zscanResult, &cursor, &membersAndScores)
  129. for i, v := range membersAndScores {
  130. if i%2 == 0 {
  131. member = append(member, v)
  132. }
  133. }
  134. return member, nil
  135. }