Parcourir la source

Support redis command Rpop (#431)

* ss

* ss

* add go-zero:stores:redis-command:Rpop and redis_test

* Delete 1.go

* support redis command Rpop

Co-authored-by: fanhongyi <fanhongyi@tal.com>
foyon il y a 3 ans
Parent
commit
8b273a075c
2 fichiers modifiés avec 20 ajouts et 1 suppressions
  1. 14 0
      core/stores/redis/redis.go
  2. 6 1
      core/stores/redis/redis_test.go

+ 14 - 0
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)

+ 6 - 1
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")