术语“收回”是指具有到期集(TTL)的密钥。虽然没有专用的命令来实现您想要的,但是您可以使用事务,例如:
WATCH bucket-1
HGET bucket-1 name
(pseudo: if not nil)
MULTI
HDEL bucket-1 name
EXEC
如果
EXEC
失败意味着你在线程B中(假设A先到达那里)。
或者,可以将上面的内容压缩成一个惯用的lua脚本,正如@the dude建议的那样,例如(
为可读性添加了换行符
):
EVAL "local v=redis.call('HGET', KEYS[1], ARGV[1])
redis.call('HDEL', KEYS[1], ARGS[1])
return v"
1 bucket-1 name
一
nil
回复意味着你是B。