我想将数组的数组作为散列键存储在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中存储如下多个hash数据。怎么做?
hmset key val1 [["1", "2"], ["3", "4"]] val2 [["a", "b"], ["c", "d"]]
最佳答案
哈希中的每个字段 (val) 都可以包含一个字符串值。要查看(第二个)成功命令的结果,只需使用 HEGETALL
在你的 key 上:
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
的分隔符,你实际上创建了四个字段(val1
, y],
, w]]
和 [[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>
看起来好像您想将数组存储在单个哈希字段中。您只能以这种方式存储数组的字符串表示形式(即您将无法访问数组中的特定元素),如下所示:
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, 2], [3, 4]]"
3) "val2"
4) "[[\"a\", \"b\"], [\"c\", \"d\"]]"
关于redis - 在哈希键中存储数组值会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600790/