From c9a2a60e28717d3cde190c2fd83e6c9dd84dba7e Mon Sep 17 00:00:00 2001 From: lucaq Date: Wed, 23 Jun 2021 10:46:16 +0800 Subject: [PATCH] Add Sinter,Sinterstore & Modify TestRedis_Set (#779) * Add Sinter,Sinterstore; Modify TestRedis_Set * Update redis_test.go fix test failure Co-authored-by: lucq Co-authored-by: Kevin Wan --- core/stores/redis/redis.go | 35 +++++++++++++++++++++++++++++++++ core/stores/redis/redis_test.go | 10 ++++++++++ 2 files changed, 45 insertions(+) diff --git a/core/stores/redis/redis.go b/core/stores/redis/redis.go index caf05a22..dd5687e4 100644 --- a/core/stores/redis/redis.go +++ b/core/stores/redis/redis.go @@ -1282,6 +1282,41 @@ func (s *Redis) Sdiffstore(destination string, keys ...string) (val int, err err return } +// Sinter is the implementation of redis sinter command. +func (s *Redis) Sinter(keys ...string) (val []string, err error) { + err = s.brk.DoWithAcceptable(func() error { + conn, err := getRedis(s) + if err != nil { + return err + } + + val, err = conn.SInter(keys...).Result() + return err + }, acceptable) + + return +} + +// Sinterstore is the implementation of redis sinterstore command. +func (s *Redis) Sinterstore(destination string, keys ...string) (val int, err error) { + err = s.brk.DoWithAcceptable(func() error { + conn, err := getRedis(s) + if err != nil { + return err + } + + v, err := conn.SInterStore(destination, keys...).Result() + if err != nil { + return err + } + + val = int(v) + return nil + }, acceptable) + + return +} + // Ttl is the implementation of redis ttl command. func (s *Redis) Ttl(key string) (val int, err error) { err = s.brk.DoWithAcceptable(func() error { diff --git a/core/stores/redis/redis_test.go b/core/stores/redis/redis_test.go index f3a1500c..2416fffc 100644 --- a/core/stores/redis/redis_test.go +++ b/core/stores/redis/redis_test.go @@ -638,6 +638,16 @@ func TestRedis_Set(t *testing.T) { num, err = client.Sdiffstore("key4", "key1", "key2") assert.Nil(t, err) assert.Equal(t, 1, num) + _, err = New(client.Addr, badType()).Sinter("key1", "key2") + assert.NotNil(t, err) + vals, err = client.Sinter("key1", "key2") + assert.Nil(t, err) + assert.ElementsMatch(t, []string{"2", "3", "4"}, vals) + _, err = New(client.Addr, badType()).Sinterstore("key4", "key1", "key2") + assert.NotNil(t, err) + num, err = client.Sinterstore("key4", "key1", "key2") + assert.Nil(t, err) + assert.Equal(t, 3, num) }) }