暴露redis EvalSha 以及ScriptLoad接口 (#538)
Co-authored-by: shanehe <shanehe@zego.im>
This commit is contained in:
@@ -250,6 +250,21 @@ func (s *Redis) Eval(script string, keys []string, args ...interface{}) (val int
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Eval is the implementation of redis eval command.
|
||||||
|
func (s *Redis) EvalSha(script string, keys []string, args ...interface{}) (val interface{}, err error) {
|
||||||
|
err = s.brk.DoWithAcceptable(func() error {
|
||||||
|
conn, err := getRedis(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
val, err = conn.EvalSha(script, keys, args...).Result()
|
||||||
|
return err
|
||||||
|
}, acceptable)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Exists is the implementation of redis exists command.
|
// Exists is the implementation of redis exists command.
|
||||||
func (s *Redis) Exists(key string) (val bool, err error) {
|
func (s *Redis) Exists(key string) (val bool, err error) {
|
||||||
err = s.brk.DoWithAcceptable(func() error {
|
err = s.brk.DoWithAcceptable(func() error {
|
||||||
@@ -1672,7 +1687,7 @@ func (s *Redis) String() string {
|
|||||||
return s.Addr
|
return s.Addr
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Redis) scriptLoad(script string) (string, error) {
|
func (s *Redis) ScriptLoad(script string) (string, error) {
|
||||||
conn, err := getRedis(s)
|
conn, err := getRedis(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
|||||||
@@ -947,13 +947,24 @@ func TestRedisString(t *testing.T) {
|
|||||||
func TestRedisScriptLoad(t *testing.T) {
|
func TestRedisScriptLoad(t *testing.T) {
|
||||||
runOnRedis(t, func(client *Redis) {
|
runOnRedis(t, func(client *Redis) {
|
||||||
client.Ping()
|
client.Ping()
|
||||||
_, err := NewRedis(client.Addr, "").scriptLoad("foo")
|
_, err := NewRedis(client.Addr, "").ScriptLoad("foo")
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
_, err = client.scriptLoad("foo")
|
_, err = client.ScriptLoad("foo")
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRedisEvalSha(t *testing.T) {
|
||||||
|
runOnRedis(t, func(client *Redis) {
|
||||||
|
client.Ping()
|
||||||
|
scriptHash, err := client.ScriptLoad(`return redis.call("EXISTS", KEYS[1])`)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
result, err := client.EvalSha(scriptHash, []string{"key1"})
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, int64(0), result)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestRedisToPairs(t *testing.T) {
|
func TestRedisToPairs(t *testing.T) {
|
||||||
pairs := toPairs([]red.Z{
|
pairs := toPairs([]red.Z{
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user