ZINCRBY
Introduction
In Dragonfly, as well as in Redis and Valkey, the ZINCRBY
command is used to increment the score of a member in a sorted set.
If the member doesn't exist, it is added with the incremented score as its initial value.
This command is often used in leaderboard systems, statistical counters, and ranking applications where member scores need to be dynamically updated.
Syntax
ZINCRBY key increment member
- Time complexity: O(log(N)) where N is the number of elements in the sorted set.
- ACL categories: @write, @sortedset, @fast
Parameter Explanations
key
: The key of the sorted set whose member's score is to be incremented.increment
: The value by which to increment the member's score. The increment can be an integer or a floating-point number, and it can be positive or negative.member
: The member whose score will be incremented. If the member does not exist, it is added to the sorted set.
Return Values
The command returns the new score of the member after being incremented.
Code Examples
Basic Example
Increment the score of a member and return the updated score:
# Initially, user123 has a score of 10 in the leaderboard.
dragonfly$> ZADD leaderboard 10 user123
(integer) 1
# Increment user123's score by 5.
dragonfly$> ZINCRBY leaderboard 5 user123
"15"
Adding a New Member with ZINCRBY
If the member doesn't exist, ZINCRBY
adds it with the increment as its initial score:
# user999 doesn't exist in the sorted set yet.
dragonfly$> ZINCRBY leaderboard 8 user999
"8" # Now user999 has a score of 8.
Increment a Member Score with a Negative Value
Use a negative increment to reduce the member's score:
# Initially, user123 has a score of 10 in the leaderboard.
dragonfly$> ZADD leaderboard 10 user123
(integer) 1
dragonfly$> ZINCRBY leaderboard -3 user123
"7" # The score is now 7 after applying the negative increment.
Floating-Point Increments
You can use floating-point values for finer score adjustments:
# user456 has no score yet and will be created with a floating-point score.
dragonfly$> ZINCRBY leaderboard 2.5 user456
"2.5"
# Further increment using a floating-point value.
dragonfly$> ZINCRBY leaderboard 0.1 user456
"2.6"
Best Practices
- Use
ZINCRBY
efficiently in score-aggregation scenarios such as updating user points, wins, or other rank-based updates. - When using floating-point increments, consider precision requirements for your application to avoid rounding issues.
Common Mistakes
- Using
ZINCRBY
on a key that doesn't store a sorted set will result in an error. Always ensure the key references a valid sorted set. - Expecting
ZINCRBY
to work on non-numeric values will lead to errors, as it only supports numeric increments.
FAQs
Can I decrement a score with ZINCRBY
?
Yes, by providing a negative increment value, you can reduce the score of a member.
What happens if the key doesn't exist?
If the key doesn't exist, a new sorted set is created, and the member is added with the provided increment as its initial score.
What if the member doesn't exist in the sorted set?
If the member doesn't exist, it will be added to the sorted set with the provided increment as its initial score.