對于?`INCR`?命令,我們有一些特別的事情要說明。Redis 為什么會提供一個自己很簡單就 能實現的功能呢?就像下面這么簡單:
~~~
x = GET count
x += 1
SET count x
~~~
然而問題是,這種遞增操作只能用于單客戶端上。看一下,如果兩個客戶端同時執行這樣 的操作會發生什么:
1. 客戶端 A 讀取值 x 為10
2. 客戶端 B 讀取值 x 為10
3. 客戶端 A 寫 x 的值為11
4. 客戶端 B 寫 x 的值為11
我們希望 x 的值為12,但是真實的 x 的值僅僅是11,這是因為你自己定義的遞增操作不是 一個原子性操作。使用 Redis 的?`INCR`?命令可以防止這樣的事情發生, 因為它是一個原 子性操作。Redis 為許多不同類型的數據提供了類似的原子性操作。