diff --git a/core/stores/redis/redis.go b/core/stores/redis/redis.go index e188104a..fdc59e2e 100644 --- a/core/stores/redis/redis.go +++ b/core/stores/redis/redis.go @@ -751,6 +751,20 @@ func (s *Redis) Pipelined(fn func(Pipeliner) error) (err error) { return } +func (s *Redis) Rpop(key string) (val string, err error) { + err = s.brk.DoWithAcceptable(func() error { + conn, err := getRedis(s) + if err != nil { + return err + } + + val, err = conn.RPop(key).Result() + return err + }, acceptable) + + return +} + func (s *Redis) Rpush(key string, values ...interface{}) (val int, err error) { err = s.brk.DoWithAcceptable(func() error { conn, err := getRedis(s) diff --git a/core/stores/redis/redis_test.go b/core/stores/redis/redis_test.go index b2dd8477..e084cf42 100644 --- a/core/stores/redis/redis_test.go +++ b/core/stores/redis/redis_test.go @@ -272,7 +272,12 @@ func TestRedis_List(t *testing.T) { val, err = client.Lpush("key", "value1", "value2") assert.Nil(t, err) assert.Equal(t, 5, val) - val, err = client.Rpush("key", "value3", "value3") + _, err = NewRedis(client.Addr, "").Rpop("key") + assert.NotNil(t, err) + v, err = client.Rpop("key") + assert.Nil(t, err) + assert.Equal(t, "value4", v) + val, err = client.Rpush("key", "value4", "value3", "value3") assert.Nil(t, err) assert.Equal(t, 7, val) _, err = NewRedis(client.Addr, "").Lrem("key", 2, "value1")