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

     1  package pool
     2  
     3  import (
     4  	"context"
     5  	"github.com/go-redis/redis/v8"
     6  )
     7  
     8  //SAdd set中添加 members
     9  func (c *Client) SAdd(ctx context.Context, key string, members ...interface{}) (int64, error) {
    10  	client, cErr := getClusterClient(c)
    11  
    12  	if cErr != nil {
    13  		return 0, cErr
    14  	}
    15  
    16  	res, err := client.SAdd(ctx, key, members...).Result()
    17  
    18  	return res, err
    19  }
    20  
    21  //MSAddReq 批量 SAdd 参数
    22  type MSAddReq struct {
    23  	Key     string
    24  	Members []interface{}
    25  }
    26  
    27  //MSAdd 批量 SAdd
    28  func (c *Client) MSAdd(ctx context.Context, reqs []*MSAddReq) (int64, error) {
    29  	client, cErr := getClusterClient(c)
    30  
    31  	if cErr != nil {
    32  		return 0, cErr
    33  	}
    34  
    35  	cmds, err := client.Pipelined(ctx, func(pipe redis.Pipeliner) error {
    36  		for _, r := range reqs {
    37  			pipe.SAdd(ctx, r.Key, r.Members...)
    38  		}
    39  		return nil
    40  	})
    41  
    42  	if err != nil {
    43  		return 0, err
    44  	}
    45  
    46  	var res int64
    47  	err = nil
    48  	for _, cmd := range cmds {
    49  		res, err = cmd.(*redis.IntCmd).Result()
    50  		if err != nil {
    51  			break
    52  		}
    53  	}
    54  
    55  	return res, err
    56  }
    57  
    58  //SCard 返回set中 key 的基数
    59  func (c *Client) SCard(ctx context.Context, key string) (int64, error) {
    60  	client, cErr := getClusterClient(c)
    61  
    62  	if cErr != nil {
    63  		return 0, cErr
    64  	}
    65  
    66  	res, err := client.SCard(ctx, key).Result()
    67  
    68  	return res, err
    69  }
    70  
    71  //SIsMember 判断member是否为 set中的成员
    72  func (c *Client) SIsMember(ctx context.Context, key string, member interface{}) (bool, error) {
    73  	client, cErr := getClusterClient(c)
    74  
    75  	if cErr != nil {
    76  		return false, cErr
    77  	}
    78  
    79  	res, err := client.SIsMember(ctx, key, member).Result()
    80  
    81  	return res, err
    82  }
    83  
    84  //SMembers 返回set中的多有成员
    85  func (c *Client) SMembers(ctx context.Context, key string) ([]string, error) {
    86  	client, cErr := getClusterClient(c)
    87  
    88  	if cErr != nil {
    89  		return nil, cErr
    90  	}
    91  
    92  	res, err := client.SMembers(ctx, key).Result()
    93  
    94  	return res, err
    95  }
    96  
    97  //SPop 随机弹出 set中的成员
    98  func (c *Client) SPop(ctx context.Context, key string) (string, error) {
    99  	client, cErr := getClusterClient(c)
   100  
   101  	if cErr != nil {
   102  		return "", cErr
   103  	}
   104  
   105  	res, err := client.SPop(ctx, key).Result()
   106  
   107  	return res, err
   108  }
   109  
   110  //SRandMember 随机返回set中一个元素
   111  func (c *Client) SRandMember(ctx context.Context, key string) (string, error) {
   112  	client, cErr := getClusterClient(c)
   113  
   114  	if cErr != nil {
   115  		return "", cErr
   116  	}
   117  
   118  	res, err := client.SRandMember(ctx, key).Result()
   119  
   120  	return res, err
   121  }
   122  
   123  //SRandMemberN 随机返回set中N个元素
   124  func (c *Client) SRandMemberN(ctx context.Context, key string, n int64) ([]string, error) {
   125  	client, cErr := getClusterClient(c)
   126  
   127  	if cErr != nil {
   128  		return nil, cErr
   129  	}
   130  
   131  	res, err := client.SRandMemberN(ctx, key, n).Result()
   132  
   133  	return res, err
   134  }
   135  
   136  //SRem 移除集合 key 中的一个或多个 member 元素
   137  func (c *Client) SRem(ctx context.Context, key string, member ...interface{}) (int64, error) {
   138  	client, cErr := getClusterClient(c)
   139  
   140  	if cErr != nil {
   141  		return 0, cErr
   142  	}
   143  
   144  	res, err := client.SRem(ctx, key, member...).Result()
   145  
   146  	return res, err
   147  }
   148  
   149  //MSRemReq 批量 SRem 参数
   150  type MSRemReq struct {
   151  	Key     string
   152  	Members []interface{}
   153  }
   154  
   155  //MSRem 批量 SRem
   156  func (c *Client) MSRem(ctx context.Context, reqs []*MSRemReq) (int64, error) {
   157  	client, cErr := getClusterClient(c)
   158  
   159  	if cErr != nil {
   160  		return 0, cErr
   161  	}
   162  
   163  	cmds, err := client.Pipelined(ctx, func(pipe redis.Pipeliner) error {
   164  		for _, r := range reqs {
   165  			pipe.SRem(ctx, r.Key, r.Members...)
   166  		}
   167  		return nil
   168  	})
   169  
   170  	if err != nil {
   171  		return 0, err
   172  	}
   173  
   174  	var res int64
   175  	err = nil
   176  	for _, cmd := range cmds {
   177  		res, err = cmd.(*redis.IntCmd).Result()
   178  		if err != nil {
   179  			break
   180  		}
   181  	}
   182  
   183  	return res, err
   184  }