Redis 的 SETNX 命令用于確保某個鍵值對(key-value pair)在 Redis 實例中是唯一的。換句話說,如果一個鍵已經被設置了一個值,那么再次嘗試使用 SETNX 為該鍵設置新值將返回 0(false)。這可以確保操作的唯一性。
然而,SETNX 不能保證事務的原子性。這意味著在多個客戶端同時嘗試使用 SETNX 修改同一個鍵時,可能會出現競爭條件。為了解決這個問題,可以使用 Redis 的事務功能(MULTI, EXEC, WATCH 等命令)來確保一系列命令的原子性執行。
這是一個使用事務和 SETNX 確保操作唯一性的示例:
> MULTI
OK
> SET key1 value1
(integer) 1
> WATCH key1
OK
> EXEC
1) (nil)
2) (nil)
3) (nil)
在這個示例中,首先使用 MULTI 命令開啟一個事務。然后使用 SET 命令為 key1 設置值 value1,SET 命令返回 1 表示成功。接下來使用 WATCH 命令監視 key1,以防止在執行事務期間其他客戶端修改它。最后,執行 EXEC 命令提交事務。如果 key1 在事務期間被其他客戶端修改,那么事務將失敗,所有命令將返回 (nil)。