在散列键中存储数组值会引发错误

时间:2014-12-22 10:26:31

标签: redis

我想将redis中的数组数组存储为哈希键。但它会引发以下错误 MSET正在运作。为什么HSET不起作用?

127.0.0.1:6379> hset key val1 [[x, y], [z, w]] 
(error) ERR wrong number of arguments for 'hset' command
127.0.0.1:6379> hmset key val1 [[x, y], [z, w]] val2 [[1,2], [3,4]]
OK

如何将上述值存储在特定的密钥redis中?

以及

127.0.0.1:6379> hmset key val1 [[1, 2], [3, 4]] val2 [[a, b], [c, d]] 
OK
127.0.0.1:6379> hmset key val1 [["1", "2"], ["3", "4"]] val2 [["a", "b"], ["c", "d"]] 
Invalid argument(s)

如果我们在数组中有字符串符号,为什么会抛出无效参数错误?

我想在redis中存储以下多个哈希数据。怎么做?

hmset key val1 [["1", "2"], ["3", "4"]] val2 [["a", "b"], ["c", "d"]]

1 个答案:

答案 0 :(得分:0)

哈希中的每个字段(val)都可以包含单个字符串值。要查看(第二个)成功命令的结果,只需在密钥上使用HEGETALL

127.0.0.1:6379> hmset key val1 [[x, y], [z, w]] val2 [[1,2], [3,4]]
OK
127.0.0.1:6379> hgetall key
1) "val1"
2) "[[x,"
3) "y],"
4) "[z,"
5) "w]]"
6) "val2"
7) "[[1,2],"
8) "[3,4]]"

您可以清楚地看到,由于空格是HSET的分隔符,因此您实际创建了四个字段(val1y],w]]和{{1} })各自的价值观。

同样,对于第3个陈述:

[[1,2],

看起来好像你想在一个哈希字段中存储一个数组。您只能以这种方式存储数组的字符串表示形式(即,您将无法访问数组中的特定元素),如下所示:

127.0.0.1:6379> hmset key val1 [[1, 2], [3, 4]] val2 [[a, b], [c, d]] 
OK
127.0.0.1:6379> hgetall key
 1) "val1"
 2) "[[1,"
 3) "2],"
 4) "[3,"
 5) "4]]"
 6) "val2"
 7) "[[a,"
 8) "b],"
 9) "[c,"
10) "d]]"
127.0.0.1:6379>