feat(redis):add timeout method to extend blpop (#2472)

master
#Suyghur 2 years ago committed by GitHub
parent aa2be0163a
commit 0c66e041b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -267,6 +267,31 @@ func (s *Redis) BlpopExCtx(ctx context.Context, node RedisNode, key string) (str
return vals[1], true, nil
}
// BlpopWithTimeout uses passed in redis connection to execute blpop command.
// Control blocking query timeout
func (s *Redis) BlpopWithTimeout(node RedisNode, timeout time.Duration, key string) (string, error) {
return s.BlpopWithTimeoutCtx(context.Background(), node, timeout, key)
}
// BlpopWithTimeoutCtx uses passed in redis connection to execute blpop command.
// Control blocking query timeout
func (s *Redis) BlpopWithTimeoutCtx(ctx context.Context, node RedisNode, timeout time.Duration, key string) (string, error) {
if node == nil {
return "", ErrNilNode
}
vals, err := node.BLPop(ctx, timeout, key).Result()
if err != nil {
return "", err
}
if len(vals) < 2 {
return "", fmt.Errorf("no value on key: %s", key)
}
return vals[1], nil
}
// Decr is the implementation of redis decr command.
func (s *Redis) Decr(key string) (int64, error) {
return s.DecrCtx(context.Background(), key)

@ -1117,6 +1117,17 @@ func TestRedisBlpopEx(t *testing.T) {
})
}
func TestRedisBlpopWithTimeout(t *testing.T) {
runOnRedis(t, func(client *Redis) {
client.Ping()
var node mockedNode
_, err := client.BlpopWithTimeout(nil, 10*time.Second, "foo")
assert.NotNil(t, err)
_, err = client.BlpopWithTimeout(node, 10*time.Second, "foo")
assert.NotNil(t, err)
})
}
func TestRedisGeo(t *testing.T) {
runOnRedis(t, func(client *Redis) {
client.Ping()

Loading…
Cancel
Save