func (c *ClusterClient) getClients() map[string]*Client {
	c.clientsMx.RLock()
	clients := make(map[string]*Client, len(c.clients))
	for addr, client := range c.clients {
		clients[addr] = client
	}
	c.clientsMx.RUnlock()
	return clients
}
getClients returns a snapshot of clients for cluster nodes
this ClusterClient has been working with recently.
Note that snapshot can contain closed clients.
package redis
import (
	"math/rand"
	"sync"
	"sync/atomic"
	"time"
	"gopkg.in/redis.v3/internal"
	"gopkg.in/redis.v3/internal/hashtag"
	"gopkg.in/redis.v3/internal/pool"
)
type ClusterClient struct {
	commandable
	opt *ClusterOptions
	slotsMx sync.RWMutex  
	addrs   []string
	slots   [][]string
	clientsMx sync.RWMutex  
	clients   map[string]*Client
	_closed int32  
	reloading uint32
}
func NewClusterClient(opt *ClusterOptions) *ClusterClient {
	client := &ClusterClient{
		opt:     opt,
		addrs:   opt.Addrs,
		slots:   make([][]string, hashtag.SlotNumber),
		clients: make(map[string]*Client),
	}
	client.commandable.process = client.process
	client.reloadSlots()
	return client
}