DELIFEQ

用法
DELIFEQ key value
复杂度
O(1)
9.0.0
ACL 类别
@string, @write, @fast

如果键的值与给定字符串匹配,则删除该键。

此命令通常用于在分布式系统中安全地释放锁,确保只有锁的所有者(由值标识)才能删除它。

如果键存在且存储的值是与提供的值完全匹配的字符串,则删除该键并返回 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

另请参阅

  • SET IFEQ - 仅当键与给定值匹配时才设置该键。

RESP2/RESP3 回复

以下之一

  • 整数回复:如果键被删除,则为 1

  • 整数回复:如果键未被删除(因为它不存在或值与提供的值不相等),则为 0