Skip to content

Commit f83600d

Browse files
authored
Merge pull request #1762 from MrChenCode/master
add command zdiff
2 parents 1393126 + 7a7b75e commit f83600d

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

commands.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,8 @@ type Cmdable interface {
277277
ZScore(ctx context.Context, key, member string) *FloatCmd
278278
ZUnionStore(ctx context.Context, dest string, store *ZStore) *IntCmd
279279
ZRandMember(ctx context.Context, key string, count int, withScores bool) *StringSliceCmd
280+
ZDiff(ctx context.Context, keys ...string) *StringSliceCmd
281+
ZDiffWithScores(ctx context.Context, keys ...string) *ZSliceCmd
280282

281283
PFAdd(ctx context.Context, key string, els ...interface{}) *IntCmd
282284
PFCount(ctx context.Context, keys ...string) *IntCmd
@@ -2368,6 +2370,35 @@ func (c cmdable) ZRandMember(ctx context.Context, key string, count int, withSco
23682370
return cmd
23692371
}
23702372

2373+
// redis-server version >= 6.2.0.
2374+
func (c cmdable) ZDiff(ctx context.Context, keys ...string) *StringSliceCmd {
2375+
args := make([]interface{}, 2+len(keys))
2376+
args[0] = "zdiff"
2377+
args[1] = len(keys)
2378+
for i, key := range keys {
2379+
args[i+2] = key
2380+
}
2381+
2382+
cmd := NewStringSliceCmd(ctx, args...)
2383+
_ = c(ctx, cmd)
2384+
return cmd
2385+
}
2386+
2387+
// redis-server version >= 6.2.0.
2388+
func (c cmdable) ZDiffWithScores(ctx context.Context, keys ...string) *ZSliceCmd {
2389+
args := make([]interface{}, 3+len(keys))
2390+
args[0] = "zdiff"
2391+
args[1] = len(keys)
2392+
for i, key := range keys {
2393+
args[i+2] = key
2394+
}
2395+
args[len(keys)+2] = "withscores"
2396+
2397+
cmd := NewZSliceCmd(ctx, args...)
2398+
_ = c(ctx, cmd)
2399+
return cmd
2400+
}
2401+
23712402
//------------------------------------------------------------------------------
23722403

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

commands_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3960,6 +3960,45 @@ var _ = Describe("Commands", func() {
39603960
Expect(err).NotTo(HaveOccurred())
39613961
Expect(slice).To(Or(Equal([]string{"one", "1"}), Equal([]string{"two", "2"})))
39623962
})
3963+
3964+
It("should ZDiff", func() {
3965+
err := client.ZAdd(ctx, "zset1", &redis.Z{Score: 1, Member: "one"}).Err()
3966+
Expect(err).NotTo(HaveOccurred())
3967+
err = client.ZAdd(ctx, "zset1", &redis.Z{Score: 2, Member: "two"}).Err()
3968+
Expect(err).NotTo(HaveOccurred())
3969+
err = client.ZAdd(ctx, "zset1", &redis.Z{Score: 3, Member: "three"}).Err()
3970+
Expect(err).NotTo(HaveOccurred())
3971+
err = client.ZAdd(ctx, "zset2", &redis.Z{Score: 1, Member: "one"}).Err()
3972+
Expect(err).NotTo(HaveOccurred())
3973+
3974+
v, err := client.ZDiff(ctx, "zset1", "zset2").Result()
3975+
Expect(err).NotTo(HaveOccurred())
3976+
Expect(v).To(Equal([]string{"two", "three"}))
3977+
})
3978+
3979+
It("should ZDiffWithScores", func() {
3980+
err := client.ZAdd(ctx, "zset1", &redis.Z{Score: 1, Member: "one"}).Err()
3981+
Expect(err).NotTo(HaveOccurred())
3982+
err = client.ZAdd(ctx, "zset1", &redis.Z{Score: 2, Member: "two"}).Err()
3983+
Expect(err).NotTo(HaveOccurred())
3984+
err = client.ZAdd(ctx, "zset1", &redis.Z{Score: 3, Member: "three"}).Err()
3985+
Expect(err).NotTo(HaveOccurred())
3986+
err = client.ZAdd(ctx, "zset2", &redis.Z{Score: 1, Member: "one"}).Err()
3987+
Expect(err).NotTo(HaveOccurred())
3988+
3989+
v, err := client.ZDiffWithScores(ctx, "zset1", "zset2").Result()
3990+
Expect(err).NotTo(HaveOccurred())
3991+
Expect(v).To(Equal([]redis.Z{
3992+
{
3993+
Member: "two",
3994+
Score: 2,
3995+
},
3996+
{
3997+
Member: "three",
3998+
Score: 3,
3999+
},
4000+
}))
4001+
})
39634002
})
39644003

39654004
Describe("streams", func() {

0 commit comments

Comments
 (0)