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
 | 
						|
}
 |