mirror of
https://github.com/zeromicro/go-zero.git
synced 2025-02-03 00:38:40 +08:00
feat:add redis ExistsMany method (#3769)
This commit is contained in:
parent
8c2f4c1899
commit
431f9af43e
@ -467,6 +467,33 @@ func (s *Redis) ExistsCtx(ctx context.Context, key string) (val bool, err error)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExistsMany is the implementation of redis exists command.
|
||||||
|
// checks the existence of multiple keys in Redis using the EXISTS command.
|
||||||
|
func (s *Redis) ExistsMany(keys ...string) (int64, error) {
|
||||||
|
return s.ExistsManyCtx(context.Background(), keys...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExistsManyCtx is the implementation of redis exists command.
|
||||||
|
// checks the existence of multiple keys in Redis using the EXISTS command.
|
||||||
|
func (s *Redis) ExistsManyCtx(ctx context.Context, keys ...string) (val int64, err error) {
|
||||||
|
err = s.brk.DoWithAcceptable(func() error {
|
||||||
|
conn, err := getRedis(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
v, err := conn.Exists(ctx, keys...).Result()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
val = v
|
||||||
|
return nil
|
||||||
|
}, acceptable)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Expire is the implementation of redis expire command.
|
// Expire is the implementation of redis expire command.
|
||||||
func (s *Redis) Expire(key string, seconds int) error {
|
func (s *Redis) Expire(key string, seconds int) error {
|
||||||
return s.ExpireCtx(context.Background(), key, seconds)
|
return s.ExpireCtx(context.Background(), key, seconds)
|
||||||
|
@ -224,6 +224,36 @@ func TestRedisTLS_Exists(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRedis_ExistsMany(t *testing.T) {
|
||||||
|
runOnRedis(t, func(client *Redis) {
|
||||||
|
// Attempt to create a new Redis instance with an incorrect type and call ExistsMany
|
||||||
|
_, err := New(client.Addr, badType()).ExistsMany("key1", "key2")
|
||||||
|
assert.NotNil(t, err)
|
||||||
|
|
||||||
|
// Check if key1 and key2 exist, expecting that they do not
|
||||||
|
val, err := client.ExistsMany("key1", "key2")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, int64(0), val)
|
||||||
|
|
||||||
|
// Set the value for key1 and check if key1 exists
|
||||||
|
assert.Nil(t, client.Set("key1", "value1"))
|
||||||
|
val, err = client.ExistsMany("key1")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, int64(1), val)
|
||||||
|
|
||||||
|
// Set the value for key2 and check if key1 and key2 exist
|
||||||
|
assert.Nil(t, client.Set("key2", "value2"))
|
||||||
|
val, err = client.ExistsMany("key1", "key2")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, int64(2), val)
|
||||||
|
|
||||||
|
// Check if key1, key2, and a non-existent key3 exist, expecting that key1 and key2 do
|
||||||
|
val, err = client.ExistsMany("key1", "key2", "key3")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, int64(2), val)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestRedis_Eval(t *testing.T) {
|
func TestRedis_Eval(t *testing.T) {
|
||||||
runOnRedis(t, func(client *Redis) {
|
runOnRedis(t, func(client *Redis) {
|
||||||
_, err := New(client.Addr, badType()).Eval(`redis.call("EXISTS", KEYS[1])`, []string{"notexist"})
|
_, err := New(client.Addr, badType()).Eval(`redis.call("EXISTS", KEYS[1])`, []string{"notexist"})
|
||||||
|
Loading…
Reference in New Issue
Block a user