# BZPOPMAX

> Remove and return the highest-scored member of the first non-empty sorted set, waiting until one is available.

URL: https://docs.hotkv.com/commands/bzpopmax/

```
BZPOPMAX key [key ...] timeout
```

- Group: Sorted set
- Complexity: O(log(N)) where N is the size of the sorted set
- HotKV Cloud: all plans
- On-Premise: no license needed

`BZPOPMAX` is the blocking form of [ZPOPMAX](https://docs.hotkv.com/commands/zpopmax/index.md). It works
like [BZPOPMIN](https://docs.hotkv.com/commands/bzpopmin/index.md), but pops the member with the highest
score. If every given sorted set is empty or missing, the connection waits
until one of the keys gets a member or `timeout` passes.

`timeout` is in seconds and can have a fractional part. `0` waits forever.
Inside [MULTI](https://docs.hotkv.com/commands/multi/index.md) / [EXEC](https://docs.hotkv.com/commands/exec/index.md) and inside scripts,
`BZPOPMAX` never waits and replies at once as if the timeout had expired.

## Return value

| Case | RESP2 | RESP3 |
| --- | --- | --- |
| Member popped | Three-element array: the key, the member, the score (bulk string) | Three-element array: key, member, score (double) |
| Timeout expired | Nil array | Null |

Errors:

- `ERR timeout is not a float or out of range`, `ERR timeout is negative`, or
  `ERR timeout is out of range` for a bad `timeout`.
- `WRONGTYPE` if a key reached before the first non-empty sorted set holds a
  value that is not a sorted set.

## Examples

```
127.0.0.1:6379> ZADD board 100 "alice" 90 "bob"
(integer) 2
127.0.0.1:6379> BZPOPMAX board 0
1) "board"
2) "alice"
3) "100"
```

## Compatibility

Same as Redis 7.4 and Valkey 8.

## See also

[BZPOPMIN](https://docs.hotkv.com/commands/bzpopmin/index.md), [ZPOPMAX](https://docs.hotkv.com/commands/zpopmax/index.md), [BZMPOP](https://docs.hotkv.com/commands/bzmpop/index.md),
[BRPOP](https://docs.hotkv.com/commands/brpop/index.md)