我应该在一个命令中增加多个键字段吗?

时间:2014-11-20 10:48:23

标签: node.js redis key-value in-memory-database

我在redis中创建了如下键。

hmset mykey field1 1 field2 2
OK

//checked with command
hgetall mykey
1) "field1"
2) "1"
3) "field2"
4) "2"

结果还可以,并且工作正常。现在我想在单个命令中增加两个值,如

hincrby mykey field1 1 field2 1

有可能吗?

1 个答案:

答案 0 :(得分:1)

否 - HINCRBY不支持此类用途。如果您的动机是确保两个增量的原子性,请使用MULTI/EXEC或服务器端Lua脚本(请参阅EVAL命令)。

以下是如何解决原始问题以确保原子性:

MULTI
HSET mykey field1 1
HSET mykey field2 2
EXEC

对于第二个问题(在评论中 - “仅当设置大于”时),应使用这些参数1 <keyname> <value>评估以下脚本:

local curr = tonumber(redis.call("GET", KEYS[1]))
if type(curr) == "number" and curr < tonumber(ARGV[1]) then
    redis.call("SET", KEYS[1], ARGV[1])
    return "OK"
end