Skip to main content

DECR

Introduction​

In Dragonfly, as well as in Redis and Valkey, the DECR command is used to decrement the integer value of a key by 1. This is especially useful when implementing counters, rate-limiters, or managing resources where you need to count down.

Syntax​

DECR key
  • Time complexity: O(1)
  • ACL categories: @write, @string, @fast

Parameter Explanations​

  • key: The name of the key whose value will be decremented by 1. The key must hold a string that is an integer.

Return Values​

The command returns the value of the key after the decrement operation.

Code Examples​

Basic Example​

Decrement the value of a key:

dragonfly$> SET mycounter 5
OK
dragonfly$> DECR mycounter
(integer) 4

In this example, the value of mycounter is decremented from 5 to 4.

Decrement Non-Existent Key​

If the key does not exist, DECR initializes the value to 0 before performing the decrement:

dragonfly$> DECR not_yet_set
(integer) -1

Here, since not_yet_set did not previously exist, it is initialized to 0 and then decremented to -1.

Using DECR for Countdown Timer​

You can easily implement a countdown timer using DECR, which decrements until a limit is reached:

dragonfly$> SET countdown 10
OK
dragonfly$> DECR countdown
(integer) 9
dragonfly$> DECR countdown
(integer) 8
dragonfly$> DECR countdown
(integer) 7
dragonfly$> DECR countdown
(integer) 6

Each DECR call reduces the value by 1, simulating a countdown from 10 to 6.

Best Practices​

  • Ensure that the value stored under the key is a valid integer before calling DECR. If the value cannot be parsed as an integer, an error will be returned.
  • You can use DECR in combination with INCR to create counters that can increase or decrease based on specific application logic.

Common Mistakes​

  • Using DECR on a key that holds a non-integer, such as a string that cannot be parsed as a number. This will result in an error.
dragonfly$> SET mykey "abc"
OK
dragonfly$> DECR mykey
(error) ERR value is not an integer or out of range
  • Forgetting that if the key does not exist, DECR will treat its value as 0 and then decrement it.

FAQs​

What happens if the key does not exist?​

If the key does not exist, DECR behaves as if the key’s value is 0, then decrements to -1.

Is it possible to decrement a key while also checking if the value is a valid number?​

No, DECR will fail if the key already holds a value that is not parsable as an integer. You need to ensure beforehand that the key contains a valid number or handle errors gracefully when calling DECR.

Can I use DECR to decrement a very large number?​

Yes, DECR can handle very large integers, but keep in mind there is a limit imposed by Redis's storage of integers. The maximum and minimum values typically correspond to the range of signed 64-bit integers.