redis-util.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package common
  2. import (
  3. log "app.yhyue.com/moapp/jylog"
  4. "encoding/json"
  5. "github.com/go-redis/redis"
  6. "time"
  7. )
  8. type Redis struct {
  9. Addr string
  10. MaxConn int
  11. Db int
  12. IdleTimeOut int
  13. Client *redis.Client
  14. }
  15. type RedisConf struct {
  16. Addr string `json:"address"`
  17. PoolSize int `json:"poolSize"`
  18. DB int `json:"db"`
  19. }
  20. func InitRedis(conf RedisConf) *Redis {
  21. r := &Redis{Addr: conf.Addr, MaxConn: conf.PoolSize, Db: conf.DB}
  22. r.Init()
  23. return r
  24. }
  25. func (r *Redis) Init() {
  26. opt := &redis.Options{
  27. Addr: r.Addr,
  28. DB: r.Db,
  29. DialTimeout: 10 * time.Second,
  30. ReadTimeout: 300 * time.Second,
  31. WriteTimeout: 30 * time.Second,
  32. PoolSize: r.MaxConn,
  33. PoolTimeout: 30 * time.Second,
  34. IdleTimeout: time.Minute,
  35. IdleCheckFrequency: 5 * time.Second,
  36. }
  37. r.Client = redis.NewClient(opt)
  38. }
  39. func (r *Redis) Set(k string, v interface{}, timeout int64) bool {
  40. bt, _ := json.Marshal(v)
  41. cmd := r.Client.Set(k, bt, time.Duration(timeout)*time.Second)
  42. b, err := cmd.Result()
  43. if err != nil {
  44. log.Errorf("redis Set err %s", err.Error())
  45. }
  46. return "OK" == b
  47. }
  48. func (r *Redis) Get(k string) interface{} {
  49. cmd := r.Client.Get(k)
  50. bt, _ := cmd.Bytes()
  51. if bt != nil && len(bt) > 0 {
  52. var res interface{}
  53. if err := json.Unmarshal(bt, &res); err != nil {
  54. log.Errorf("redis Get Unmarshal err %v", err)
  55. }
  56. return res
  57. }
  58. return nil
  59. }
  60. func (r *Redis) GetBytes(k string) []byte {
  61. cmd := r.Client.Get(k)
  62. bt, err := cmd.Bytes()
  63. if err != nil {
  64. if err.Error() != "redis: nil" {
  65. log.Errorf("redis GetBytes err %s", err.Error())
  66. }
  67. return nil
  68. }
  69. return bt
  70. }
  71. func (r *Redis) MGet(k ...string) []interface{} {
  72. cmd := r.Client.MGet(k...)
  73. arr, err := cmd.Result()
  74. if err != nil {
  75. log.Errorf("redis MGet err %s", err.Error())
  76. }
  77. return arr
  78. }
  79. func (r *Redis) Incr(k string) int64 {
  80. cmd := r.Client.Incr(k)
  81. res, err := cmd.Result()
  82. if err != nil {
  83. log.Errorf("redis Incr err %s", err.Error())
  84. }
  85. return res
  86. }
  87. func (r *Redis) Del(k string) bool {
  88. _, err := r.Client.Del(k).Result()
  89. if err != nil {
  90. log.Errorf("redis Del err %s", err.Error())
  91. return false
  92. }
  93. return true
  94. }
  95. func (r *Redis) Exists(k string) bool {
  96. res, err := r.Client.Exists(k).Result()
  97. if err != nil {
  98. log.Errorf("redis Exists err %s", err.Error())
  99. }
  100. return res == 1
  101. }
  102. func (r *Redis) IncrTimeout(k string, duration time.Duration) int64 {
  103. if r.Client.TTL(k).Val().Nanoseconds() < 0 {
  104. r.Client.Set(k, 1, duration)
  105. return 1
  106. } else {
  107. return r.Incr(k)
  108. }
  109. }
  110. func (r *Redis) GetTTL(key string) int64 {
  111. cmd := r.Client.TTL(key)
  112. t, err := cmd.Result()
  113. if err != nil {
  114. log.Errorf("redis GetTTL err %s", err.Error())
  115. }
  116. if t.Nanoseconds() < 0 {
  117. return -1
  118. }
  119. return time.Unix(time.Now().Unix(), t.Nanoseconds()).Unix()
  120. }