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.