Skip to main content

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 score 5).

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 and max refer to sorted set scores, not values.
  • Reversing the order of min and max when specifying the range. If min is greater than max, the count will always be 0.
  • 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.