ZCOUNT
Introduction
In Dragonfly, as well as in Redis and Valkey, the ZCOUNT
command is used to count the members in a sorted set with scores within a specific range.
It allows you to quickly retrieve how many elements have scores between two given values, making it particularly useful for leaderboards, ranking systems, and range-based queries.
Syntax
ZCOUNT key min max
- Time complexity: O(log(N)) with N being the number of elements in the sorted set.
- ACL categories: @read, @sortedset, @fast
Parameter Explanations
key
: The key of the sorted set whose members will be counted.min
: The minimum score for the range.max
: The maximum score for the range.
Both min
and max
can be:
- Exact numbers (e.g.,
5
) -inf
or+inf
to represent negative or positive infinity, respectively- Inclusive or exclusive bounds, where you prepend
(
to the value for exclusive comparisons (e.g.,(5
excludes score5
).
Return Values
- An integer representing the number of members in the sorted set that have scores within the specified range.
- If the key does not exist,
0
is returned.
Code Examples
Basic Example
Count all members with a score between 1
and 4
:
dragonfly$> ZADD myzset 1 "one" 2 "two" 3 "three" 4 "four"
(integer) 4
dragonfly$> ZCOUNT myzset 1 4
(integer) 4
Counting Exclusive Range
Count members where the score is between 1
(exclusive) and 4
(inclusive):
dragonfly$> ZADD myzset 1 "one" 2 "two" 3 "three" 4 "four"
(integer) 4
dragonfly$> ZCOUNT myzset (1 4
(integer) 3
Count members where the score is between 1
(inclusive) and 4
(exclusive):
dragonfly$> ZCOUNT myzset 1 (4
(integer) 3
Count members where the score is between 1
and 4
, both exclusive:
dragonfly$> ZCOUNT myzset (1 (4
(integer) 2
Using Negative and Positive Infinity
Count members without specifying an upper or lower bound using -inf
and +inf
:
dragonfly$> ZADD myzset 1 "one" 2 "two" 3 "three" 4 "four"
(integer) 4
dragonfly$> ZCOUNT myzset -inf +inf
(integer) 4
Best Practices
- When unsure of the score range, use
-inf
and+inf
to include all members. - Combine inclusive and exclusive bounds for precise member selection based on scores.
Common Mistakes
- Using parentheses
(
incorrectly when specifying exclusive ranges. Always prepend(
to the number for exclusivity. - Forgetting that
min
andmax
refer to sorted set scores, not values. - Reversing the order of
min
andmax
when specifying the range. Ifmin
is greater thanmax
, the count will always be0
. - Assuming that
ZCOUNT
returns the elements themselves; it only returns the count.
FAQs
What happens if the key does not exist?
If the key does not exist, ZCOUNT
will return 0
, meaning there are no members to count.
What's the difference between ZCOUNT
and ZRANGE
?
While ZCOUNT
returns the number of elements in a score range, ZRANGE
returns the elements themselves.
If you only need the count, ZCOUNT
is more efficient.