In Redis, the ZLEXCOUNT
command returns the number of elements in a sorted set with a value between two given values. It can be used when we force lexicographical ordering by applying the same score to all members of a sorted set.
Syntax
The syntax goes like this:
ZLEXCOUNT key min max
The min
and max
arguments must start with either (
or [
to indicate whether the range is inclusive or exclusive. When it starts with the (
character, it’s exclusive, when it starts with the [
character it’s inclusive. This is demonstrated in the following examples.
Example
Suppose we create the following sorted set:
ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
Let’s use the ZLEXCOUNT
command to find out how many elements in the sorted set have a value between two values:
ZLEXCOUNT myzset [b [f
Result:
(integer) 5
In this case I used the [
argument to make it inclusive.
The integer reply of 5
tells us that there are five members with values between our range of b
and f
.
Inclusive vs Exclusive
In the previous example we started the min
and max
values with the [
character. This indicates that it’s an inclusive range. In other words, the b
and the f
were included when determining the result.
We can alternatively use the (
character to specify an exclusive range:
ZLEXCOUNT myzset (b (f
Result:
(integer) 3
In this case, the b
and f
were not included in the range (i.e. the range went from c
to e
).
We can make one argument inclusive while the other is exclusive:
ZLEXCOUNT myzset [b (f
Result:
(integer) 4
In that case the b
was included in the calculation but the f
wasn’t.
Here it is the other way around:
ZLEXCOUNT myzset (b [f
Result:
(integer) 4
Same result, but this time the b
was excluded, while the f
was included.
We can verify this by using the ZRANGE
command to return the actual members:
ZRANGE myzset (b [f BYLEX
Result:
1) "c" 2) "d" 3) "e" 4) "f"
As expected, b
was excluded, while the f
was included.
Include All Members
We can use the special values of +
or -
to specify all members in the sorted set (assuming they all have the same score). These characters indicate the positively infinite and negatively infinite strings respectively.
Example:
ZLEXCOUNT myzset - +
Result:
(integer) 7
If you find that it returns zero, but you think that’s wrong, check that you’ve got them around the right way:
ZLEXCOUNT myzset + -
Result:
(integer) 0
Here, I used + -
instead of + -
and so no elements were included.