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)。