Skip to content

Commit 5502cf6

Browse files
authored
Merge pull request #2291 from boatrainlsz/master
feat: add support for SINTERCARD command
2 parents df9162d + bc51c61 commit 5502cf6

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

commands.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ type Cmdable interface {
207207
SDiff(ctx context.Context, keys ...string) *StringSliceCmd
208208
SDiffStore(ctx context.Context, destination string, keys ...string) *IntCmd
209209
SInter(ctx context.Context, keys ...string) *StringSliceCmd
210+
SInterCard(ctx context.Context, limit int64, keys ...string) *IntCmd
210211
SInterStore(ctx context.Context, destination string, keys ...string) *IntCmd
211212
SIsMember(ctx context.Context, key string, member interface{}) *BoolCmd
212213
SMIsMember(ctx context.Context, key string, members ...interface{}) *BoolSliceCmd
@@ -1612,6 +1613,22 @@ func (c cmdable) SInter(ctx context.Context, keys ...string) *StringSliceCmd {
16121613
return cmd
16131614
}
16141615

1616+
func (c cmdable) SInterCard(ctx context.Context, limit int64, keys ...string) *IntCmd {
1617+
args := make([]interface{}, 4+len(keys))
1618+
args[0] = "sintercard"
1619+
numkeys := int64(0)
1620+
for i, key := range keys {
1621+
args[2+i] = key
1622+
numkeys++
1623+
}
1624+
args[1] = numkeys
1625+
args[2+numkeys] = "limit"
1626+
args[3+numkeys] = limit
1627+
cmd := NewIntCmd(ctx, args...)
1628+
_ = c(ctx, cmd)
1629+
return cmd
1630+
}
1631+
16151632
func (c cmdable) SInterStore(ctx context.Context, destination string, keys ...string) *IntCmd {
16161633
args := make([]interface{}, 2+len(keys))
16171634
args[0] = "sinterstore"

commands_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2551,6 +2551,36 @@ var _ = Describe("Commands", func() {
25512551
Expect(sInter.Val()).To(Equal([]string{"c"}))
25522552
})
25532553

2554+
It("should SInterCard", func() {
2555+
sAdd := client.SAdd(ctx, "set1", "a")
2556+
Expect(sAdd.Err()).NotTo(HaveOccurred())
2557+
sAdd = client.SAdd(ctx, "set1", "b")
2558+
Expect(sAdd.Err()).NotTo(HaveOccurred())
2559+
sAdd = client.SAdd(ctx, "set1", "c")
2560+
Expect(sAdd.Err()).NotTo(HaveOccurred())
2561+
2562+
sAdd = client.SAdd(ctx, "set2", "b")
2563+
Expect(sAdd.Err()).NotTo(HaveOccurred())
2564+
sAdd = client.SAdd(ctx, "set2", "c")
2565+
Expect(sAdd.Err()).NotTo(HaveOccurred())
2566+
sAdd = client.SAdd(ctx, "set2", "d")
2567+
Expect(sAdd.Err()).NotTo(HaveOccurred())
2568+
sAdd = client.SAdd(ctx, "set2", "e")
2569+
Expect(sAdd.Err()).NotTo(HaveOccurred())
2570+
//limit 0 means no limit,see https://redis.io/commands/sintercard/ for more details
2571+
sInterCard := client.SInterCard(ctx, 0, "set1", "set2")
2572+
Expect(sInterCard.Err()).NotTo(HaveOccurred())
2573+
Expect(sInterCard.Val()).To(Equal(int64(2)))
2574+
2575+
sInterCard = client.SInterCard(ctx, 1, "set1", "set2")
2576+
Expect(sInterCard.Err()).NotTo(HaveOccurred())
2577+
Expect(sInterCard.Val()).To(Equal(int64(1)))
2578+
2579+
sInterCard = client.SInterCard(ctx, 3, "set1", "set2")
2580+
Expect(sInterCard.Err()).NotTo(HaveOccurred())
2581+
Expect(sInterCard.Val()).To(Equal(int64(2)))
2582+
})
2583+
25542584
It("should SInterStore", func() {
25552585
sAdd := client.SAdd(ctx, "set1", "a")
25562586
Expect(sAdd.Err()).NotTo(HaveOccurred())

0 commit comments

Comments
 (0)