我想运行一个HSET
命令,但仅在键存在时。类似于HSETNX
,但使用exists
而不是not exists
我已经阅读了关于使用WATCH或其他东西的可能性,但到目前为止,我仍然无法弄清楚。我会感激指点正确的方向。我唯一看到的是这个,但考虑到这些甚至不是有效的redis命令,我不知道这是如何工作的。
此外,在阅读关于WATCH的内容后,我担心如果有另一个请求,我不想中止事务。
我基本上正在尝试HGETALL,之后立即发出第二条HSET命令,说它已经被读取了一次。
之后,我希望所有后续请求都知道它已经被读取过了。
问题是,当我对不存在的键调用HSET时,它不会失败,而是在redis数据库中创建一个新条目,这不是我想要的。我只想在无需先检查是否存在的情况下更新记录。
根据这个,对于高争用(将有大量请求关键字)该方法无论如何都不起作用。
https://github.com/antirez/redis/issues/441
它说我可以以某种方式使用脚本,但我不确定
exists
之后立即调用hgetall
和hset
,所以如果存在,则执行hgetall
和set
,否则不执行任何操作。 - Tallboy