Как изменить данные в отсортированном наборе?

Я использую тип данных отсортированного набора в Redis. Добавляю данные командой zadd. Добавление данных в формате JSON.

Как я могу изменить значение в этом отсортированном наборе по счету? Мне нужно получить значение JSON и изменить одно поле, а после обновить этот отсортированный набор.

Я попытался снова добавить данные с той же оценкой, но получил дубликаты.


person Muhad    schedule 23.09.2015    source источник
comment
Кажется, если значение отличается, Redis добавляет новый элемент в набор sorte с тем же score (:   -  person Muhad    schedule 24.09.2015
comment
Конечно. Как Redis может узнать, что вы ссылаетесь на существующего участника, если вы отправили другого? Также вам следует проверить параметр XX на ZADD.   -  person thepirat000    schedule 24.09.2015
comment
Тогда как изменить данные? Я добавляю данные, например: zadd(key, score, data). После того, как я получу данные score и попытаюсь обновить data   -  person Muhad    schedule 24.09.2015


Ответы (3)


Это просто!

ZREM key data;
ZADD key score newdata;

Вы просто не можете ОБНОВИТЬ элемент в структуре SET. Это невозможно по определению! Как будто я не могу СЪЕСТЬ чашку воды, я могу ее только ВЫПИТЬ ^_^

Ответьте, если у вас возникнут дополнительные проблемы.

Кстати, я не знаю, что нужно вашему приложению, но у меня есть стойкое ощущение, что SORTED SET не подходит для вашего приложения senario.

person Murphy Ng    schedule 24.09.2015
comment
я храню данные временных рядов, и каждый раз, когда я извлекаю новые свечи, последние 2 сохраненные свечи меняются, я использую отсортированный набор с отметкой времени в качестве оценки и все остальное как сам элемент данных, но каждый раз я добавляю 3 новые свечи, 2 свечи уже есть, удалить их и добавить новые или нет понятия обновлений в отсортированном наборе? - person PirateApp; 12.04.2018

Элементы набора (отсортированные или нет) не обновляются. Вам придется удалить старый элемент и добавить на его место новый (обновленный JSON) с соответствующей оценкой. Вы можете обернуть это в Lua или блок WATCH/MULTI/EXEC для атомарности.

person Itamar Haber    schedule 23.09.2015

Вы можете удалить сначала по счету, если вы используете список как ключ (счет) => хранилище значений.

ZREMRANGEBYSCORE key score score
ZADD key score data
person Cal    schedule 16.09.2020