【问题标题】:How to change data in sorted set?如何更改排序集中的数据?
【发布时间】:2015-09-23 21:29:34
【问题描述】:

我在 Redis 中使用排序集数据类型。 我使用命令zadd 添加数据。添加数据为JSON格式。

如何在这个按分数排序的集合中更改值? 我需要获取 JSON 值并更改一个字段,然后更新此排序集。

我尝试再次添加相同分数的数据,但我得到了重复

【问题讨论】:

  • 看看值是否不同Redis在排序集中添加了具有相同score的新元素(:
  • 当然。如果您发送了不同的成员,redis 怎么知道您指的是现有成员?你也应该检查ZADD上的XX选项
  • 那怎么改数据呢?我添加如下数据:zadd(key, score, data)。在我通过score 获取数据并尝试更新data

标签: redis node-redis phpredis


【解决方案1】:

很简单!

ZREM key data;
ZADD key score newdata;

您根本无法更新 SET 结构中的元素。根据定义,这是不可能的!就像我不能吃一杯水,我只能喝它^_^

如果您有任何其他问题,请回复。

顺便说一下,我不知道你的应用需求,但我有一种强烈的感觉,SORTED SET 不适合你的应用场景。

【讨论】:

  • 我正在存储时间序列数据,每次我获取新蜡烛时,最后 2 个存储的蜡烛都会发生变化,我使用的是一个排序集,其中时间戳作为分数,其他所有内容作为数据项本身,但是每次我添加 3 根新蜡烛时,已经存在 2 根蜡烛,我应该删除它们并添加新蜡烛还是排序集中没有更新的概念?
【解决方案2】:

不更新集合的(排序的或未排序的)成员。您必须删除旧成员并在其位置添加新的(更新的 JSON)以及相关分数。您可以将其包装在 Lua 或 WATCH/MULTI/EXEC 块中以实现原子性。

【讨论】:

    【解决方案3】:

    如果您将列表用作键(分数)=> 值存储,则可以先按分数删除。

    ZREMRANGEBYSCORE key score score
    ZADD key score data
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 2020-09-23
      • 2012-07-27
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多