У меня есть большое количество предметов, хранящихся в сортированном наборе Redis (порядка 100 000), которые довольно часто обновляются. Этими объектами являются объекты, закодированные как строки JSON, и ранжирование для сортировки в наборе выводится (на вставке, по моему коду) из свойства даты/времени объекта.Удалить из Redis Sorted Set на основе свойства JSON
Каждый элемент в наборе имеет свойство Id (которое представляет собой Guid, закодированное как строка), которое однозначно идентифицирует элемент в системе.
Когда эти элементы обновляются, мне нужно либо обновить элемент в отсортированном наборе, либо удалить и снова вставить элемент. Проблема заключается в том, как найти этот элемент для выполнения операции.
В настоящее время я загружаю все содержимое отсортированного набора в память, работая в этой коллекции в моем коде, а затем записываю полную коллекцию обратно в Redis. Хотя это работает, оно не особенно эффективно и не будет хорошо масштабироваться, если списки начнут расти очень большими.
Есть ли у кого-нибудь какие-либо предложения относительно того, как это сделать более эффективно? Единственный уникальный идентификатор, который у меня есть для элементов, - это свойство Id, закодированное в элементе.
Большое спасибо,
Richard.
Рекомендуется использовать Хэш для хранения данных ID-> JSON, но не обязательно, поскольку вы можете использовать String для хранения JSON каждого ID под своим собственным ключом. Тем не менее, Хэш предпочтительнее с точки зрения ОЗУ из-за Redis на ключевые накладные расходы. –
@ItamarHaber Эй, как дела? ;) Да, я использовал подход с строковым ключом, пока не понял, что hases лучше не только из-за оптимизации памяти, но также и потому, что кто хочет глобальное пространство ключей, задуманное с помощью миллионов ключей, когда вы можете организовать их в подразделах –
Hola :) Как у OCD-wannabe я получаю это, но по всем практическим причинам (исключая оптимизацию ОЗУ) разделы не очень полезны, если вы не сканируете пространство ключей - плохая идея в большинстве случаев - или выполняете «пакетные» операции над подразделами (например, массовое удаление). OTOH, они добавляют еще один O (logn) для получения значения ... –