gpt4 book ai didi

redis - 仅当 Redis 存在 key 时如何进行 HSET?

转载 作者:IT王子 更新时间:2023-10-29 06:04:15 28 4
gpt4 key购买 nike

我想运行 HSET 命令,但前提是 key 存在。类似于 HSETNX 除了 exists 而不是 not exists

我读过关于可能使用 WATCH 或其他东西的信息,但到目前为止我还不能真正弄明白。我会很感激在正确的方向轻推。我唯一看到的就是这个,但考虑到这些甚至不是有效的 Redis 命令,我看不出它是如何工作的。

HSET if key exist

此外,在阅读了我关注的 WATCH 之后,因为我不想在收到另一个请求时中止交易。

我基本上是在尝试 HGETALL 并在为 HSET 发出第二个命令后立即说它已被读取一次。

之后,我希望所有后续请求都知道它已被读取。

问题是,当我在一个不存在的键上调用 HSET 时,它不仅会失败,还会在 redis 数据库中创建一个新条目,这是我不想要的。我只希望它在记录存在时更新记录,而不必先检查它是否存在

据此,该方法无论如何都不适用于高竞争(将有很多对 key 的请求)

https://github.com/antirez/redis/issues/441

它说我可以以某种方式使用脚本,但我不确定

最佳答案

是的。您可以通过运行 EVAL 命令在 Redis 中执行 lua 脚本。 EVAL 之后的所有命令都将被阻塞,直到 EVAL 完成,因为 Redis 是单线程服务器。

文档说:

EVAL and EVALSHA are used to evaluate scripts using the Lua interpreter built into Redis starting from version 2.6.0.

所以,很容易实现一个简单的HSETX命令,只需要运行下面的lua脚本:
eval "if redis.call('exists',KEYS[1]) == 1 then redis.call('hset', KEYS[1], ARGV[1], 0) end"1 test_key test_field

关于redis - 仅当 Redis 存在 key 时如何进行 HSET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53605567/

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