You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			218 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			218 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Go
		
	
| package redis
 | |
| 
 | |
| import "context"
 | |
| 
 | |
| type SetCmdable interface {
 | |
| 	SAdd(ctx context.Context, key string, members ...interface{}) *IntCmd
 | |
| 	SCard(ctx context.Context, key string) *IntCmd
 | |
| 	SDiff(ctx context.Context, keys ...string) *StringSliceCmd
 | |
| 	SDiffStore(ctx context.Context, destination string, keys ...string) *IntCmd
 | |
| 	SInter(ctx context.Context, keys ...string) *StringSliceCmd
 | |
| 	SInterCard(ctx context.Context, limit int64, keys ...string) *IntCmd
 | |
| 	SInterStore(ctx context.Context, destination string, keys ...string) *IntCmd
 | |
| 	SIsMember(ctx context.Context, key string, member interface{}) *BoolCmd
 | |
| 	SMIsMember(ctx context.Context, key string, members ...interface{}) *BoolSliceCmd
 | |
| 	SMembers(ctx context.Context, key string) *StringSliceCmd
 | |
| 	SMembersMap(ctx context.Context, key string) *StringStructMapCmd
 | |
| 	SMove(ctx context.Context, source, destination string, member interface{}) *BoolCmd
 | |
| 	SPop(ctx context.Context, key string) *StringCmd
 | |
| 	SPopN(ctx context.Context, key string, count int64) *StringSliceCmd
 | |
| 	SRandMember(ctx context.Context, key string) *StringCmd
 | |
| 	SRandMemberN(ctx context.Context, key string, count int64) *StringSliceCmd
 | |
| 	SRem(ctx context.Context, key string, members ...interface{}) *IntCmd
 | |
| 	SScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd
 | |
| 	SUnion(ctx context.Context, keys ...string) *StringSliceCmd
 | |
| 	SUnionStore(ctx context.Context, destination string, keys ...string) *IntCmd
 | |
| }
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| func (c cmdable) SAdd(ctx context.Context, key string, members ...interface{}) *IntCmd {
 | |
| 	args := make([]interface{}, 2, 2+len(members))
 | |
| 	args[0] = "sadd"
 | |
| 	args[1] = key
 | |
| 	args = appendArgs(args, members)
 | |
| 	cmd := NewIntCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SCard(ctx context.Context, key string) *IntCmd {
 | |
| 	cmd := NewIntCmd(ctx, "scard", key)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SDiff(ctx context.Context, keys ...string) *StringSliceCmd {
 | |
| 	args := make([]interface{}, 1+len(keys))
 | |
| 	args[0] = "sdiff"
 | |
| 	for i, key := range keys {
 | |
| 		args[1+i] = key
 | |
| 	}
 | |
| 	cmd := NewStringSliceCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SDiffStore(ctx context.Context, destination string, keys ...string) *IntCmd {
 | |
| 	args := make([]interface{}, 2+len(keys))
 | |
| 	args[0] = "sdiffstore"
 | |
| 	args[1] = destination
 | |
| 	for i, key := range keys {
 | |
| 		args[2+i] = key
 | |
| 	}
 | |
| 	cmd := NewIntCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SInter(ctx context.Context, keys ...string) *StringSliceCmd {
 | |
| 	args := make([]interface{}, 1+len(keys))
 | |
| 	args[0] = "sinter"
 | |
| 	for i, key := range keys {
 | |
| 		args[1+i] = key
 | |
| 	}
 | |
| 	cmd := NewStringSliceCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SInterCard(ctx context.Context, limit int64, keys ...string) *IntCmd {
 | |
| 	args := make([]interface{}, 4+len(keys))
 | |
| 	args[0] = "sintercard"
 | |
| 	numkeys := int64(0)
 | |
| 	for i, key := range keys {
 | |
| 		args[2+i] = key
 | |
| 		numkeys++
 | |
| 	}
 | |
| 	args[1] = numkeys
 | |
| 	args[2+numkeys] = "limit"
 | |
| 	args[3+numkeys] = limit
 | |
| 	cmd := NewIntCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SInterStore(ctx context.Context, destination string, keys ...string) *IntCmd {
 | |
| 	args := make([]interface{}, 2+len(keys))
 | |
| 	args[0] = "sinterstore"
 | |
| 	args[1] = destination
 | |
| 	for i, key := range keys {
 | |
| 		args[2+i] = key
 | |
| 	}
 | |
| 	cmd := NewIntCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SIsMember(ctx context.Context, key string, member interface{}) *BoolCmd {
 | |
| 	cmd := NewBoolCmd(ctx, "sismember", key, member)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // SMIsMember Redis `SMISMEMBER key member [member ...]` command.
 | |
| func (c cmdable) SMIsMember(ctx context.Context, key string, members ...interface{}) *BoolSliceCmd {
 | |
| 	args := make([]interface{}, 2, 2+len(members))
 | |
| 	args[0] = "smismember"
 | |
| 	args[1] = key
 | |
| 	args = appendArgs(args, members)
 | |
| 	cmd := NewBoolSliceCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // SMembers Redis `SMEMBERS key` command output as a slice.
 | |
| func (c cmdable) SMembers(ctx context.Context, key string) *StringSliceCmd {
 | |
| 	cmd := NewStringSliceCmd(ctx, "smembers", key)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // SMembersMap Redis `SMEMBERS key` command output as a map.
 | |
| func (c cmdable) SMembersMap(ctx context.Context, key string) *StringStructMapCmd {
 | |
| 	cmd := NewStringStructMapCmd(ctx, "smembers", key)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SMove(ctx context.Context, source, destination string, member interface{}) *BoolCmd {
 | |
| 	cmd := NewBoolCmd(ctx, "smove", source, destination, member)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // SPop Redis `SPOP key` command.
 | |
| func (c cmdable) SPop(ctx context.Context, key string) *StringCmd {
 | |
| 	cmd := NewStringCmd(ctx, "spop", key)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // SPopN Redis `SPOP key count` command.
 | |
| func (c cmdable) SPopN(ctx context.Context, key string, count int64) *StringSliceCmd {
 | |
| 	cmd := NewStringSliceCmd(ctx, "spop", key, count)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // SRandMember Redis `SRANDMEMBER key` command.
 | |
| func (c cmdable) SRandMember(ctx context.Context, key string) *StringCmd {
 | |
| 	cmd := NewStringCmd(ctx, "srandmember", key)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| // SRandMemberN Redis `SRANDMEMBER key count` command.
 | |
| func (c cmdable) SRandMemberN(ctx context.Context, key string, count int64) *StringSliceCmd {
 | |
| 	cmd := NewStringSliceCmd(ctx, "srandmember", key, count)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SRem(ctx context.Context, key string, members ...interface{}) *IntCmd {
 | |
| 	args := make([]interface{}, 2, 2+len(members))
 | |
| 	args[0] = "srem"
 | |
| 	args[1] = key
 | |
| 	args = appendArgs(args, members)
 | |
| 	cmd := NewIntCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SUnion(ctx context.Context, keys ...string) *StringSliceCmd {
 | |
| 	args := make([]interface{}, 1+len(keys))
 | |
| 	args[0] = "sunion"
 | |
| 	for i, key := range keys {
 | |
| 		args[1+i] = key
 | |
| 	}
 | |
| 	cmd := NewStringSliceCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SUnionStore(ctx context.Context, destination string, keys ...string) *IntCmd {
 | |
| 	args := make([]interface{}, 2+len(keys))
 | |
| 	args[0] = "sunionstore"
 | |
| 	args[1] = destination
 | |
| 	for i, key := range keys {
 | |
| 		args[2+i] = key
 | |
| 	}
 | |
| 	cmd := NewIntCmd(ctx, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func (c cmdable) SScan(ctx context.Context, key string, cursor uint64, match string, count int64) *ScanCmd {
 | |
| 	args := []interface{}{"sscan", key, cursor}
 | |
| 	if match != "" {
 | |
| 		args = append(args, "match", match)
 | |
| 	}
 | |
| 	if count > 0 {
 | |
| 		args = append(args, "count", count)
 | |
| 	}
 | |
| 	cmd := NewScanCmd(ctx, c, args...)
 | |
| 	_ = c(ctx, cmd)
 | |
| 	return cmd
 | |
| }
 |