incr can be used to increment the value of a given key in a single command.
// Increment myCountValue by 1, returns a promise
client.incr('myCountValue')
with async/await
// Increment myCountValue by 1, wait for it
await client.incr('myCountValue')
console.log('myCountValue increased by 1')
decr can be used to decrement the value of a given key in a single command.
// Decrement myCountValue by 1, returns a promise
client.decr('myCountValue')
with async/await
// Decrement myCountValue by 1, wait for it
await client.decr('myCountValue')
console.log('myCountValue decreased by 1')
In cases where you just want to increase or decrease the value of an item, using
incr/decr makes a lot more sense than performing a get then increasing or
decreasing its value then performing a set.
It is also helpful to eliminate race conditions since it is an atomic operation.
For example, if your Memcached server is shared by multiple hosts and multiple
want to increment a key, you could have a scenario where both hosts perform the
get, then increment then both perform the set. In this case where you'd
expect the value to be incremented by 2, it may instead be incremented only by 1
because the two fought and neither won.
Using increment eliminates those kinds of race conditions since the whole thing is performed in a single Memcached command.
In the simplest case, if you provide no increment amount, Memcache Plus will
increment or decrement the supplied key by 1. It will then resolve the Promise
with the updated value of that item.
client
.incr('myCountValue')
.then(function(val) {
// The new value will be exactly 1 more than the old one
console.log('the new value of myCountValue is', val)
})
with async/await
const val = await client.incr('myCountValue')
// The new value will be exactly 1 more than the old one
console.log('the new value of myCountValue is', val)
However, you can also specify an increment/decrement amount. For instance, to decrement a number by 5:
client
.decr('myCountValue', 5)
.then(function(val) {
// The new value will be exactly 5 less than the old one
console.log('the new value of myCountValue is', val);
});
with async/await
const val = await client.decr('myCountValue', 5)
// The new value will be exactly 5 less than the old one
console.log('the new value of myCountValue is', val)
Since it makes no sense to increment something like "banana" or
{ "foo": "bar" }, incr and decr can only be used to increment numeric
types.