gpt4 book ai didi

redis - 有什么方法可以在访问 Redis 后立即从中驱逐 key ?

转载 作者:可可西里 更新时间:2023-11-01 11:24:13 25 4
gpt4 key购买 nike

根据这个答案[ https://stackoverflow.com/a/17099452/8804776][1]

"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 中存储一个 key ,一旦线程访问它,它就应该退出。

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

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

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

最佳答案

术语“逐出”是指具有到期集 (TTL) 的 key 。虽然没有专门的命令来实现您想要的,但您可以使用如下事务:

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。

关于redis - 有什么方法可以在访问 Redis 后立即从中驱逐 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52629013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com