我想运行HSET命令,但前提是密钥存在。类似于HSETNX除了exists而不是not exists
我读过有关使用 WATCH 或其他东西的内容,但到目前为止我还无法真正弄清楚。我希望能朝正确的方向推动。我唯一看到的是这个,但考虑到这些甚至不是有效的 redis 命令,我不知道这是如何工作的。
另外,在阅读了有关 WATCH 的内容后,我很担心,因为我不想在收到另一个请求时中止事务。
我基本上尝试 HGETALL 并在发出第二个 HSET 命令后立即表示它已被读取一次。
之后,我希望所有后续请求都知道它已被读取。
问题是,当我对不存在的键调用 HSET 时,它不仅会失败,还会在 redis 数据库中创建一个新条目,这是我不想要的。我只希望它更新记录(如果存在),而不必先检查它是否存在
据此,该方法对于高争用无论如何都不起作用(将会有很多对密钥的请求)
https://github.com/antirez/redis/issues/441
它说我可以以某种方式使用脚本,但我不确定
是的。您可以通过运行命令在Redis中执行lua脚本EVAL。后面的所有命令EVAL都会被阻塞,直到EVAL由于 Redis 是单线程服务器,因此
文档说:
\n\n\n\n\n从版本 2.6.0 开始,EVAL 和 EVALSHA 用于使用 Redis 内置的 Lua 解释器来评估脚本。
\n
因此,很容易实现一个简单的HSETX命令\xef\xbc\x8c只需运行下面的 lua 脚本:\n\neval "if redis.call(\'exists\',KEYS[1]) == 1 then redis.call(\'hset\', KEYS[1], ARGV[1], 0) end" 1 test_key test_field\n
| 归档时间: |
|
| 查看次数: |
5625 次 |
| 最近记录: |