Skip to content

Commit bb65dcd

Browse files
committed
feat: add zintercard cmd
Signed-off-by: monkey92t <golang@88.com>
1 parent 09fcdbe commit bb65dcd

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

commands.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ type Cmdable interface {
268268
ZIncrBy(ctx context.Context, key string, increment float64, member string) *FloatCmd
269269
ZInter(ctx context.Context, store *ZStore) *StringSliceCmd
270270
ZInterWithScores(ctx context.Context, store *ZStore) *ZSliceCmd
271+
ZInterCard(ctx context.Context, limit int64, keys ...string) *IntCmd
271272
ZInterStore(ctx context.Context, destination string, store *ZStore) *IntCmd
272273
ZMScore(ctx context.Context, key string, members ...string) *FloatSliceCmd
273274
ZPopMax(ctx context.Context, key string, count ...int64) *ZSliceCmd
@@ -2346,6 +2347,22 @@ func (c cmdable) ZInterWithScores(ctx context.Context, store *ZStore) *ZSliceCmd
23462347
return cmd
23472348
}
23482349

2350+
func (c cmdable) ZInterCard(ctx context.Context, limit int64, keys ...string) *IntCmd {
2351+
args := make([]interface{}, 4+len(keys))
2352+
args[0] = "zintercard"
2353+
numkeys := int64(0)
2354+
for i, key := range keys {
2355+
args[2+i] = key
2356+
numkeys++
2357+
}
2358+
args[1] = numkeys
2359+
args[2+numkeys] = "limit"
2360+
args[3+numkeys] = limit
2361+
cmd := NewIntCmd(ctx, args...)
2362+
_ = c(ctx, cmd)
2363+
return cmd
2364+
}
2365+
23492366
func (c cmdable) ZMScore(ctx context.Context, key string, members ...string) *FloatSliceCmd {
23502367
args := make([]interface{}, 2+len(members))
23512368
args[0] = "zmscore"

commands_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4353,6 +4353,32 @@ var _ = Describe("Commands", func() {
43534353
Expect(v).To(Equal([]string{"one", "two"}))
43544354
})
43554355

4356+
It("should ZInterCard", func() {
4357+
err := client.ZAdd(ctx, "zset1", redis.Z{Score: 1, Member: "one"}).Err()
4358+
Expect(err).NotTo(HaveOccurred())
4359+
err = client.ZAdd(ctx, "zset1", redis.Z{Score: 2, Member: "two"}).Err()
4360+
Expect(err).NotTo(HaveOccurred())
4361+
err = client.ZAdd(ctx, "zset2", redis.Z{Score: 1, Member: "one"}).Err()
4362+
Expect(err).NotTo(HaveOccurred())
4363+
err = client.ZAdd(ctx, "zset2", redis.Z{Score: 2, Member: "two"}).Err()
4364+
Expect(err).NotTo(HaveOccurred())
4365+
err = client.ZAdd(ctx, "zset2", redis.Z{Score: 3, Member: "three"}).Err()
4366+
Expect(err).NotTo(HaveOccurred())
4367+
4368+
// limit 0 means no limit
4369+
sInterCard := client.ZInterCard(ctx, 0, "zset1", "zset2")
4370+
Expect(sInterCard.Err()).NotTo(HaveOccurred())
4371+
Expect(sInterCard.Val()).To(Equal(int64(2)))
4372+
4373+
sInterCard = client.ZInterCard(ctx, 1, "zset1", "zset2")
4374+
Expect(sInterCard.Err()).NotTo(HaveOccurred())
4375+
Expect(sInterCard.Val()).To(Equal(int64(1)))
4376+
4377+
sInterCard = client.ZInterCard(ctx, 3, "zset1", "zset2")
4378+
Expect(sInterCard.Err()).NotTo(HaveOccurred())
4379+
Expect(sInterCard.Val()).To(Equal(int64(2)))
4380+
})
4381+
43564382
It("should ZInterWithScores", func() {
43574383
err := client.ZAdd(ctx, "zset1", redis.Z{Score: 1, Member: "one"}).Err()
43584384
Expect(err).NotTo(HaveOccurred())

0 commit comments

Comments
 (0)