gitee.com/h79/goutils@v1.22.10/dao/redis/pool/server.go (about)

     1  package pool
     2  
     3  import (
     4  	"context"
     5  	"sync"
     6  
     7  	"github.com/go-redis/redis/v8"
     8  )
     9  
    10  //Info 获取所有就节点信息
    11  func (c *Client) Info(ctx context.Context, section ...string) (res map[string]string, err error) {
    12  	client, cErr := getClusterClient(c)
    13  
    14  	if cErr != nil {
    15  		return nil, cErr
    16  	}
    17  
    18  	res = make(map[string]string, 0)
    19  	locker := sync.RWMutex{}
    20  	err = client.ForEachShard(ctx, func(ctx context.Context, c *redis.Client) error {
    21  		defer locker.Unlock()
    22  
    23  		addr := c.Options().Addr
    24  		r, e := c.Info(ctx, section...).Result()
    25  		locker.Lock()
    26  		if e == nil {
    27  			res[addr] = r
    28  		} else {
    29  			res[addr] = e.Error()
    30  		}
    31  
    32  		return e
    33  	})
    34  
    35  	return res, err
    36  }
    37  
    38  //NodeInfo 获取单个节点的info
    39  func (c *Client) NodeInfo(ctx context.Context, addr string, section ...string) (res string, err error) {
    40  	client, cErr := getClusterClient(c)
    41  
    42  	if cErr != nil {
    43  		return "", cErr
    44  	}
    45  
    46  	err = client.ForEachShard(ctx, func(ctx context.Context, c *redis.Client) (err error) {
    47  		if addr == c.Options().Addr {
    48  			res, err = c.Info(ctx, section...).Result()
    49  		}
    50  		return
    51  	})
    52  
    53  	return res, err
    54  }