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 }