Skip to content

Commit 036605d

Browse files
authored
add ZDiffStore command (#1775)
1 parent 74246e0 commit 036605d

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

commands.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ type Cmdable interface {
281281
ZRandMember(ctx context.Context, key string, count int, withScores bool) *StringSliceCmd
282282
ZDiff(ctx context.Context, keys ...string) *StringSliceCmd
283283
ZDiffWithScores(ctx context.Context, keys ...string) *ZSliceCmd
284+
ZDiffStore(ctx context.Context, destination string, keys ...string) *IntCmd
284285

285286
PFAdd(ctx context.Context, key string, els ...interface{}) *IntCmd
286287
PFCount(ctx context.Context, keys ...string) *IntCmd
@@ -2458,6 +2459,18 @@ func (c cmdable) ZDiffWithScores(ctx context.Context, keys ...string) *ZSliceCmd
24582459
return cmd
24592460
}
24602461

2462+
// redis-server version >=6.2.0.
2463+
func (c cmdable) ZDiffStore(ctx context.Context, destination string, keys ...string) *IntCmd {
2464+
args := make([]interface{}, 0, 3+len(keys))
2465+
args = append(args, "zdiffstore", destination, len(keys))
2466+
for _, key := range keys {
2467+
args = append(args, key)
2468+
}
2469+
cmd := NewIntCmd(ctx, args...)
2470+
_ = c(ctx, cmd)
2471+
return cmd
2472+
}
2473+
24612474
//------------------------------------------------------------------------------
24622475

24632476
func (c cmdable) PFAdd(ctx context.Context, key string, els ...interface{}) *IntCmd {

commands_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4048,6 +4048,31 @@ var _ = Describe("Commands", func() {
40484048
},
40494049
}))
40504050
})
4051+
4052+
It("should ZDiffStore", func() {
4053+
err := client.ZAdd(ctx, "zset1", &redis.Z{Score: 1, Member: "one"}).Err()
4054+
Expect(err).NotTo(HaveOccurred())
4055+
err = client.ZAdd(ctx, "zset1", &redis.Z{Score: 2, Member: "two"}).Err()
4056+
Expect(err).NotTo(HaveOccurred())
4057+
err = client.ZAdd(ctx, "zset2", &redis.Z{Score: 1, Member: "one"}).Err()
4058+
Expect(err).NotTo(HaveOccurred())
4059+
err = client.ZAdd(ctx, "zset2", &redis.Z{Score: 2, Member: "two"}).Err()
4060+
Expect(err).NotTo(HaveOccurred())
4061+
err = client.ZAdd(ctx, "zset2", &redis.Z{Score: 3, Member: "three"}).Err()
4062+
Expect(err).NotTo(HaveOccurred())
4063+
v, err := client.ZDiffStore(ctx, "out1", "zset1", "zset2").Result()
4064+
Expect(err).NotTo(HaveOccurred())
4065+
Expect(v).To(Equal(int64(0)))
4066+
v, err = client.ZDiffStore(ctx, "out1", "zset2", "zset1").Result()
4067+
Expect(err).NotTo(HaveOccurred())
4068+
Expect(v).To(Equal(int64(1)))
4069+
vals, err := client.ZRangeWithScores(ctx, "out1", 0, -1).Result()
4070+
Expect(err).NotTo(HaveOccurred())
4071+
Expect(vals).To(Equal([]redis.Z{{
4072+
Score: 3,
4073+
Member: "three",
4074+
}}))
4075+
})
40514076
})
40524077

40534078
Describe("streams", func() {

0 commit comments

Comments
 (0)