support zunionstore in redis (#410)
This commit is contained in:
@@ -51,7 +51,8 @@ type (
|
|||||||
Pipeliner = red.Pipeliner
|
Pipeliner = red.Pipeliner
|
||||||
|
|
||||||
// Z represents sorted set member.
|
// Z represents sorted set member.
|
||||||
Z = red.Z
|
Z = red.Z
|
||||||
|
ZStore = red.ZStore
|
||||||
|
|
||||||
IntCmd = red.IntCmd
|
IntCmd = red.IntCmd
|
||||||
FloatCmd = red.FloatCmd
|
FloatCmd = red.FloatCmd
|
||||||
@@ -1394,6 +1395,20 @@ func (s *Redis) Zrevrank(key string, field string) (val int64, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Redis) Zunionstore(dest string, store ZStore, keys ...string) (val int64, err error) {
|
||||||
|
err = s.brk.DoWithAcceptable(func() error {
|
||||||
|
conn, err := getRedis(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
val, err = conn.ZUnionStore(dest, store, keys...).Result()
|
||||||
|
return err
|
||||||
|
}, acceptable)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Redis) String() string {
|
func (s *Redis) String() string {
|
||||||
return s.Addr
|
return s.Addr
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -715,6 +715,20 @@ func TestRedis_SortedSet(t *testing.T) {
|
|||||||
assert.Equal(t, 0, len(pairs))
|
assert.Equal(t, 0, len(pairs))
|
||||||
_, err = NewRedis(client.Addr, "").Zrevrank("key", "value")
|
_, err = NewRedis(client.Addr, "").Zrevrank("key", "value")
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
|
client.Zadd("second", 2, "aa")
|
||||||
|
client.Zadd("third", 3, "bbb")
|
||||||
|
val, err = client.Zunionstore("union", ZStore{
|
||||||
|
Weights: []float64{1, 2},
|
||||||
|
Aggregate: "SUM",
|
||||||
|
}, "second", "third")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, int64(2), val)
|
||||||
|
vals, err = client.Zrange("union", 0, 10000)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.EqualValues(t, []string{"aa", "bbb"}, vals)
|
||||||
|
ival, err := client.Zcard("union")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, 2, ival)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user