redis.go 938 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package lib
  2. import (
  3. "context"
  4. "gitdxz.51daxuetong.cn/go_dev/bids_rpcx/config"
  5. "github.com/go-redis/redis/v8"
  6. "sync"
  7. "time"
  8. )
  9. var Redis *redis.Client
  10. var redisSyncOne sync.Once
  11. func GetRedisClient() (*redis.Client, error) {
  12. redisSyncOne.Do(func() {
  13. redisObj, err := GetNewRedisClient()
  14. if err != nil {
  15. return
  16. }
  17. Redis = redisObj
  18. })
  19. err := Redis.Ping(context.Background()).Err()
  20. if err != nil {
  21. time.Sleep(10 * time.Second)
  22. Redis, err := GetNewRedisClient()
  23. return Redis, err
  24. }
  25. return Redis, err
  26. }
  27. func GetNewRedisClient() (*redis.Client, error) {
  28. cc := config.GetConfig()
  29. rHost := cc.String("redis_host")
  30. rPort := cc.String("redis_port")
  31. rPwd := cc.String("redis_password")
  32. redisObj := redis.NewClient(&redis.Options{
  33. Addr: rHost + ":" + rPort,
  34. Password: rPwd, // no password set
  35. DB: 0, // use default DB
  36. })
  37. err := redisObj.Ping(context.Background()).Err()
  38. return redisObj, err
  39. }