Redis - Какой тип данных будет наиболее эффективным способом хранения данных - PullRequest
0 голосов
/ 30 декабря 2018

Я не совсем уверен, какой тип данных / подход будет наилучшим для следующих сценариев.

Я буду хранить полные объекты json, и каждый из этих объектов будет иметь несколько свойств, одно из которых будетID (int field).

public class Event
{
   public int EventId {get; set}
   public DateTime EventDate {get; set;}
   public string Title {get; set;}
   public int TypeId {get; set;}
}
  1. Мне нужно будет иметь возможность искать отдельные объекты по этому идентификатору, я предполагаю, что это будет просто сохранено как пара ключ / значениеключ - "что-то" + id, а значение - сериализованный объект json.

  2. Я бы хотел получить список перечисленных выше объектов постраничным способом, скажем, на первой странице.и размер страницы равен 20. (Hashset или Sorted Set)

  3. номер 2 и выше. Можно также выполнить с подкачкой, но сначала отфильтровать по одному из полей, а затем вернуть результаты

Я хотел бы иметь только одну копию каждого объекта json для удовлетворения вышеуказанных сценариев, из всего, что я прочитал до сих пор, кажется, что я буду создавать несколько копий каждого объекта, чтобы удовлетворить все вышеприведенные сценарии.rios.

Короче говоря, мне нравится мой список объектов, сохраненных для извлечения с помощью

  1. Извлечение одного элемента по идентификатору (свойство объекта json

  2. Пейджинговые списки без фильтров

  3. Пейджинговые списки с подкачкой и фильтрацией объектов json

  4. В любомвремя, когда любой из объектов события может быть изменен пользователем, поэтому необходимо обновить кэш (аннулировать кэш / обновить кэш)

Я пишу код в .NET, так что еслиимеет значение.

1 Ответ

0 голосов
/ 31 декабря 2018

Похоже на выполнение простых запросов значений ключей, для чего вам нужна дополнительная логика для запуска на стороне сервера (Redis).Вы можете использовать сценарии Lua в Redis для выполнения таких задач.

Если я правильно понимаю ваши требования, вот как я бы подошел:

  1. Хранить объекты в отсортированном видеset (если вы возвращаете объекты в определенном порядке)

  2. Теперь вы можете запрашивать отдельные и нефильтрованные объекты с помощью собственных команд Redis: Redis - отсортированный набор, найти элемент по значению свойства

  3. Для отфильтрованных объектов вы можете просмотреть скрипты Lua

  4. Redis не предоставляет ничего из коробки для аннулирования / обновления кэшахранится в списках.И вам придется написать дополнительный код для обработки обновления кэша.Подробнее здесь: https://quickleft.com/blog/how-to-create-and-expire-list-items-in-redis

Вы также можете проверить воспламенение, в него встроено несколько функций, которые могут вас заинтересовать:

  1. Двоичный маршаллер: «Он позволяет вам читать произвольное поле из сериализованной формы объекта без полной десериализации объекта».https://apacheignite.readme.io/docs/binary-marshaller

  2. Возможность чтения / записи через обновление кэша: https://ignite.apache.org/use-cases/caching/database-caching.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...