redis - 在哈希键中存储数组值会引发错误

标签 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中存储如下多个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/

相关文章:

node.js - 我应该使用什么? Socket.io 房间还是 Redis pub-sub?

django - 如何调整 celery 设置,使 Redis 不使用太多内存? celery 任务 RESULT_EXPIRES?

Spring Sessions HttpSession无法完全替代JSESSIONID

redis - 将 Jedis 与 Spring Data @RedisHash 注释一起使用时,为什么数据在 Redis 中以 SET 类型存储?

Redis如何存储关联数组?设置或散列或列表?

java - Redis hash写入速度非常慢

python - 仅使用 1 个 web dyno 和 0 个 worker dyno 运行 Heroku 后台任务

node.js - 如何更新存储在排序集中的 Redis 中的元素?

redis - 在 Redis 中查询频率统计信息?

jakarta-ee - 如何将多个 spring-data 应用程序与共享数据库一起使用