- 用法
-
DELIFEQ key value
- 复杂度
- O(1)
- 自
- 9.0.0
- ACL 类别
- @string, @write, @fast
SET IFEQ
- 仅当键与给定值匹配时才设置该键。
如果键的值与给定字符串匹配,则删除该键。
此命令通常用于在分布式系统中安全地释放锁,确保只有锁的所有者(由值标识)才能删除它。
如果键存在且存储的值是与提供的值完全匹配的字符串,则删除该键并返回 1
。否则,键保持不变并返回 0
。
示例
基本用法
127.0.0.1:6379> SET mykey abc123
OK
127.0.0.1:6379> DELIFEQ mykey abc123
(integer) 1
127.0.0.1:6379> DELIFEQ mykey abc123
(integer) 0
错误的值
127.0.0.1:6379> SET mykey xyz789
OK
127.0.0.1:6379> DELIFEQ mykey abc123
(integer) 0
错误的类型
127.0.0.1:6379> SADD mykey somevalue
(integer) 1
127.0.0.1:6379> DELIFEQ mykey somevalue
(error) WRONGTYPE Operation against a key holding the wrong kind of value
用例:安全锁释放
DELIFEQ
支持原子性的检查和删除操作,仅当进程仍持有锁时才安全地释放它。这避免了在原始所有者尝试删除锁之前,锁可能已过期并被另一个进程占用的竞态条件。
此模式常用于分布式锁系统,例如 Redlock,该系统此前依赖 Lua 脚本来实现此逻辑。通过 DELIFEQ
,此类用例变得更加健壮和符合习惯。
代替
EVAL "if redis.call('GET',KEYS[1]) == ARGV[1] then return redis.call('DEL',KEYS[1]) else return 0 end" 1 mykey abc123
现在您可以使用
DELIFEQ mykey abc123
另请参阅
RESP2/RESP3 回复
以下之一