BLPOP
Removes and returns the first element of the list, or blocks until one is available.
Syntax
BLPOP key [key ...] timeout
Parameters
- key: One or more keys representing the lists from which elements will be removed. The command examines the lists in the order they are specified.
- timeout: The maximum time in seconds to block waiting for an element to be available. If set to
0
, the command will block indefinitely until an element is available. If set to a positive number, the command will block for that number of seconds before returningnil
if no element is available.
Details
- Available since: 1.0.0
- Time complexity: O(1) for each pop operation. The blocking time complexity depends on the
timeout
value. - ACL categories:
@read
,@write
,@list
,@slow
The BLPOP
command removes and returns the first element from the first non-empty list among the specified keys. If none of the specified lists contain elements, the command blocks until an element becomes available or until the timeout
expires. If the timeout
is set to 0
, the command will block indefinitely.
The command returns a list with two elements:
- The key of the list from which the element was removed.
- The element itself.
Examples
Basic Usage
Assume we have the following lists:
RPUSH mylist1 "a" "b" "c"
RPUSH mylist2 "x" "y"
To remove and return the first element from the beginning of mylist1
:
BLPOP mylist1
After running this command:
mylist1
will contain:b
c
- The returned value will be:
1) "mylist1"
2) "a"
Blocking Behavior
To block until an element becomes available in mylist1
or mylist2
, with a timeout of 5 seconds:
BLPOP mylist1 mylist2 5
If an element becomes available within 5 seconds, it will be removed from one of the lists and returned. If no element becomes available within the timeout period, the command will return nil
.
Immediate Return
To return immediately if no element is available, use a 0
timeout:
BLPOP mylist1 mylist2 0
If both mylist1
and mylist2
are empty, the command will return nil
.
Multiple Keys
To remove and return the first element from the beginning of multiple lists:
BLPOP mylist1 mylist2 mylist3 10
The command will examine all specified lists in the order they are listed and return the first element from the first non-empty list within 10 seconds.
Edge Cases
- If
timeout
is set to a negative value, the command will return an error. - If all specified lists are empty and the
timeout
expires, the command will returnnil
.
RESP2/RESP3 Reply
- Array reply: A list containing two elements:
- The key of the list from which the element was removed.
- The removed element.
- If no element is available within the
timeout
period, the reply isnil
.