redisclientmanager.go 960 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package redis
  2. import (
  3. "crypto/tls"
  4. "io"
  5. red "github.com/go-redis/redis"
  6. "github.com/tal-tech/go-zero/core/syncx"
  7. )
  8. const (
  9. defaultDatabase = 0
  10. maxRetries = 3
  11. idleConns = 8
  12. )
  13. var clientManager = syncx.NewResourceManager()
  14. func getClient(server, pass string) (*red.Client, error) {
  15. return getClientWithTLS(server, pass, false)
  16. }
  17. func getClientWithTLS(server, pass string, tlsFlag bool) (*red.Client, error) {
  18. val, err := clientManager.GetResource(server, func() (io.Closer, error) {
  19. var tlsConfig *tls.Config = nil
  20. if tlsFlag {
  21. tlsConfig = &tls.Config{
  22. InsecureSkipVerify: true,
  23. }
  24. }
  25. store := red.NewClient(&red.Options{
  26. Addr: server,
  27. Password: pass,
  28. DB: defaultDatabase,
  29. MaxRetries: maxRetries,
  30. MinIdleConns: idleConns,
  31. TLSConfig: tlsConfig,
  32. })
  33. store.WrapProcess(process)
  34. return store, nil
  35. })
  36. if err != nil {
  37. return nil, err
  38. }
  39. return val.(*red.Client), nil
  40. }