有什么方法可以在访问 Redis 后立即从中驱逐密钥?

Is there any ways to evict keys from Redis just after accessing it?

根据这个答案 [

"You might not know it, but Redis is actually single-threaded, which is how every command is guaranteed to be atomic. While one command is executing, no other command will run."

Redis 是单线程的。我的要求是在 Redis 中存储一个密钥,一旦线程访问它,它就应该退出。

例如: HSET bucket-1 名称贾斯汀

线程A和B访问同一个key HGET bucket-1 名称
在任何给定点,只有一个线程应该获取数据。

是否有任何特定设置可以实现此目的?

没有使用哈希执行此操作的命令。您可以使用 Lua 脚本来处理这个问题。

您也可以改用 GETSET,您可以将密钥重置为表示它已被其他消费者使用的值。

术语 "eviction" 指的是具有到期设置 (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

A nil 回复表示你是 B.