hash.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. // Copyright 2019 github.com. All rights reserved.
  2. // Use of this source code is governed by github.com.
  3. package redis
  4. import (
  5. "github.com/go-redis/redis"
  6. )
  7. func (p *Redis) HMGet(key string, fields ...string) (res []string, err error) {
  8. // 安全检查
  9. if p == nil {
  10. return res, errRedis
  11. }
  12. vals := make([]interface{}, len(fields))
  13. if p.cluster {
  14. // 客户端安全检查
  15. if p.cclient == nil {
  16. return res, errRedisCClient
  17. }
  18. if vals, err = p.cclient.HMGet(key, fields...).Result(); err != nil {
  19. return res, err
  20. }
  21. // 转为[]string
  22. return strings(vals, err)
  23. }
  24. // 客户端安全检查
  25. if p.client == nil {
  26. return res, errRedisClient
  27. }
  28. if vals, err = p.client.HMGet(key, fields...).Result(); err != nil {
  29. return res, err
  30. }
  31. // 转为[]string
  32. return strings(vals, err)
  33. }
  34. func (p *Redis) HGet(key, field string) (res string, err error) {
  35. // 安全检查
  36. if p == nil {
  37. return res, errRedis
  38. }
  39. if p.cluster {
  40. // 客户端安全检查
  41. if p.cclient == nil {
  42. return res, errRedisCClient
  43. }
  44. return p.cclient.HGet(key, field).Result()
  45. }
  46. // 客户端安全检查
  47. if p.client == nil {
  48. return res, errRedisClient
  49. }
  50. return p.client.HGet(key, field).Result()
  51. }
  52. func (p *Redis) HGetAll(key string) (res map[string]string, err error) {
  53. // 安全检查
  54. if p == nil {
  55. return res, errRedis
  56. }
  57. if p.cluster {
  58. // 客户端安全检查
  59. if p.cclient == nil {
  60. return res, errRedisCClient
  61. }
  62. return p.cclient.HGetAll(key).Result()
  63. }
  64. // 客户端安全检查
  65. if p.client == nil {
  66. return res, errRedisClient
  67. }
  68. return p.client.HGetAll(key).Result()
  69. }
  70. func (p *Redis) HMSet(key string, fields map[string]interface{}) (res string, err error) {
  71. // 安全检查
  72. if p == nil {
  73. return res, errRedis
  74. }
  75. if p.cluster {
  76. // 客户端安全检查
  77. if p.cclient == nil {
  78. return res, errRedisCClient
  79. }
  80. return p.cclient.HMSet(key, fields).Result()
  81. }
  82. // 客户端安全检查
  83. if p.client == nil {
  84. return res, errRedisClient
  85. }
  86. return p.client.HMSet(key, fields).Result()
  87. }
  88. func (p *Redis) HSet(key, field string, value interface{}) (res bool, err error) {
  89. // 安全检查
  90. if p == nil {
  91. return res, errRedis
  92. }
  93. if p.cluster {
  94. // 客户端安全检查
  95. if p.cclient == nil {
  96. return res, errRedisCClient
  97. }
  98. return p.cclient.HSet(key, field, value).Result()
  99. }
  100. // 客户端安全检查
  101. if p.client == nil {
  102. return res, errRedisClient
  103. }
  104. return p.client.HSet(key, field, value).Result()
  105. }
  106. func (p *Redis) HIncrBy(key, field string, incr int64) (res int64, err error) {
  107. // 安全检查
  108. if p == nil {
  109. return res, errRedis
  110. }
  111. if p.cluster {
  112. // 客户端安全检查
  113. if p.cclient == nil {
  114. return res, errRedisCClient
  115. }
  116. return p.cclient.HIncrBy(key, field, incr).Result()
  117. }
  118. // 客户端安全检查
  119. if p.client == nil {
  120. return res, errRedisClient
  121. }
  122. return p.client.HIncrBy(key, field, incr).Result()
  123. }
  124. func (p *Redis) BatchHGetAll(keys ...string) (res map[string]map[string]string, err error) {
  125. // 安全检查
  126. if p == nil {
  127. return res, errRedis
  128. }
  129. cmds := make(map[string]*redis.StringStringMapCmd, len(keys))
  130. if p.cluster {
  131. // 客户端安全检查
  132. if p.cclient == nil {
  133. return res, errRedisCClient
  134. }
  135. if _, err := p.cclient.Pipelined(func(pipe redis.Pipeliner) error {
  136. for _, key := range keys {
  137. cmds[key] = pipe.HGetAll(key)
  138. }
  139. return nil
  140. }); err != nil {
  141. return nil, err
  142. }
  143. } else {
  144. // 客户端安全检查
  145. if p.client == nil {
  146. return res, errRedisClient
  147. }
  148. if _, err := p.client.Pipelined(func(pipe redis.Pipeliner) error {
  149. for _, key := range keys {
  150. cmds[key] = pipe.HGetAll(key)
  151. }
  152. return nil
  153. }); err != nil {
  154. return nil, err
  155. }
  156. }
  157. result := make(map[string]map[string]string, len(cmds))
  158. for _, key := range keys {
  159. if v, ok := cmds[key]; ok && v != nil {
  160. result[key] = v.Val()
  161. }
  162. }
  163. return result, nil
  164. }