1
0
mirror of https://github.com/redis/go-redis.git synced 2025-06-14 01:21:30 +03:00

Add ZADD modifiers.

This commit is contained in:
Vladimir Mihailenco
2015-08-29 13:08:27 +03:00
parent 152c38c687
commit d2689feb56
3 changed files with 243 additions and 30 deletions

View File

@ -1008,19 +1008,98 @@ type ZStore struct {
Aggregate string
}
func (c *commandable) ZAdd(key string, members ...Z) *IntCmd {
args := make([]interface{}, 2+2*len(members))
args[0] = "ZADD"
args[1] = key
func (c *commandable) zAdd(a []interface{}, n int, members ...Z) *IntCmd {
for i, m := range members {
args[2+2*i] = formatFloat(m.Score)
args[2+2*i+1] = m.Member
a[n+2*i] = formatFloat(m.Score)
a[n+2*i+1] = m.Member
}
cmd := NewIntCmd(args...)
cmd := NewIntCmd(a...)
c.Process(cmd)
return cmd
}
// Redis `ZADD key score member [score member ...]` command.
func (c *commandable) ZAdd(key string, members ...Z) *IntCmd {
const n = 2
a := make([]interface{}, n+2*len(members))
a[0], a[1] = "ZADD", key
return c.zAdd(a, n, members...)
}
// Redis `ZADD key NX score member [score member ...]` command.
func (c *commandable) ZAddNX(key string, members ...Z) *IntCmd {
const n = 3
a := make([]interface{}, n+2*len(members))
a[0], a[1], a[2] = "ZADD", key, "NX"
return c.zAdd(a, n, members...)
}
// Redis `ZADD key XX score member [score member ...]` command.
func (c *commandable) ZAddXX(key string, members ...Z) *IntCmd {
const n = 3
a := make([]interface{}, n+2*len(members))
a[0], a[1], a[2] = "ZADD", key, "XX"
return c.zAdd(a, n, members...)
}
// Redis `ZADD key CH score member [score member ...]` command.
func (c *commandable) ZAddCh(key string, members ...Z) *IntCmd {
const n = 3
a := make([]interface{}, n+2*len(members))
a[0], a[1], a[2] = "ZADD", key, "CH"
return c.zAdd(a, n, members...)
}
// Redis `ZADD key NX CH score member [score member ...]` command.
func (c *commandable) ZAddNXCh(key string, members ...Z) *IntCmd {
const n = 4
a := make([]interface{}, n+2*len(members))
a[0], a[1], a[2], a[3] = "ZADD", key, "NX", "CH"
return c.zAdd(a, n, members...)
}
// Redis `ZADD key XX CH score member [score member ...]` command.
func (c *commandable) ZAddXXCh(key string, members ...Z) *IntCmd {
const n = 4
a := make([]interface{}, n+2*len(members))
a[0], a[1], a[2], a[3] = "ZADD", key, "XX", "CH"
return c.zAdd(a, n, members...)
}
func (c *commandable) zIncr(a []interface{}, n int, members ...Z) *FloatCmd {
for i, m := range members {
a[n+2*i] = formatFloat(m.Score)
a[n+2*i+1] = m.Member
}
cmd := NewFloatCmd(a...)
c.Process(cmd)
return cmd
}
// Redis `ZADD key INCR score member` command.
func (c *commandable) ZIncr(key string, member Z) *FloatCmd {
const n = 3
a := make([]interface{}, n+2)
a[0], a[1], a[2] = "ZADD", key, "INCR"
return c.zIncr(a, n, member)
}
// Redis `ZADD key NX INCR score member` command.
func (c *commandable) ZIncrNX(key string, member Z) *FloatCmd {
const n = 4
a := make([]interface{}, n+2)
a[0], a[1], a[2], a[3] = "ZADD", key, "INCR", "NX"
return c.zIncr(a, n, member)
}
// Redis `ZADD key XX INCR score member` command.
func (c *commandable) ZIncrXX(key string, member Z) *FloatCmd {
const n = 4
a := make([]interface{}, n+2)
a[0], a[1], a[2], a[3] = "ZADD", key, "INCR", "XX"
return c.zIncr(a, n, member)
}
func (c *commandable) ZCard(key string) *IntCmd {
cmd := NewIntCmd("ZCARD", key)
c.Process(cmd)