如何更新存储在有序集中的Redis中的元素?

时间:2014-06-16 11:54:44

标签: node.js express redis

我使用Redis作为排序集中数据的持久性。我的数据如下所示:

{text: 'Some text1', data: [1, 2, 3]},
{test: 'Some text2', data: [1, 3]}
.
.
.

如何更新该列表中的某些元素?假设我需要更新

{test: 'Some text2', data: [1, 3]}

{test: 'Some text2', data: [1, 3, 7]}

2 个答案:

答案 0 :(得分:3)

您只能将值添加到有序集,或删除它们。除了分数之外,您无法更改/更新它们。

您可以直接将值保存为字符串:

SET text2 "{\"test\": \"Some text2\", data: [1, 3]}"

然后通过替换原始值

来更新它们
SET text2 "{\"test\": \"Some text2\", data: [1, 3, 7]}"

其他选项是将值存储在Hash中。

<强>更新

假设您有User对象,这些对象以“user:[id]”键的形式保存为json:

SET users:1 "{\"id\":1,\"name\":\"Santtu\"}"

然后将用户对象的键存储在已排序的“用户”中。

ZADD users 1 "users:1"
ZADD users 2 "users:2"

您现在可以通过首先查询密钥然后查询每个用户数据来获取用户:

ZRANGE users 0 9 # returns [ "users:1", "users:2", ...]
GET "users:1"
GET "users:2"
...

通过更改分数来更改套装中的用户顺序:

ZADD users 2 "users:123"
ZADD users 1 "users:456"

答案 1 :(得分:1)

请在redis-cli中使用以下命令:

zincrby <set_name> <amount_to_be_changed> <key>

例如:

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"