redisclustermanager.go 903 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. var clusterManager = syncx.NewResourceManager()
  9. func getCluster(server, pass string) (*red.ClusterClient, error) {
  10. return getClusterWithTLS(server, pass, false)
  11. }
  12. func getClusterWithTLS(server, pass string, tlsEnabled bool) (*red.ClusterClient, error) {
  13. val, err := clusterManager.GetResource(server, func() (io.Closer, error) {
  14. var tlsConfig *tls.Config
  15. if tlsEnabled {
  16. tlsConfig = &tls.Config{
  17. InsecureSkipVerify: true,
  18. }
  19. }
  20. store := red.NewClusterClient(&red.ClusterOptions{
  21. Addrs: []string{server},
  22. Password: pass,
  23. MaxRetries: maxRetries,
  24. MinIdleConns: idleConns,
  25. TLSConfig: tlsConfig,
  26. })
  27. store.WrapProcess(process)
  28. return store, nil
  29. })
  30. if err != nil {
  31. return nil, err
  32. }
  33. return val.(*red.ClusterClient), nil
  34. }