Управляйте 2 коллекциями в Redis, используя Sets и.Net client. Это правильный подход?

Я пытаюсь работать / исследовать redis для области.NET, у меня сложилось впечатление, что определенная задача лучше всего не покрывается наборами, а сама redis (так как у меня есть объект, который мне нужно изменить) - так что, возможно, лучше использовать некоторые другие подходы / или redis dataTypes здесь (одна из первоначальных идей заключалась в работе с redis-хэшами (для управления свойствами), но затем я решил попробовать с наборами, так как мне нужно получить коллекцию связанных сущностей, и эта операция, кажется, самый важный в общем). Итак, что я сделал на данный момент:

Прямо сейчас у меня есть следующая конфигурация сущности:

Entity:
    ID : Guid
    Name : string 500
    Status : string 1 (i, u, d)
    MaxItems : int 
    CurrentItems : int

То, что я пытаюсь сделать - это управлять объектами Entity с двумя коллекциями:

  1. Current - коллекция элементов Entity (до 5000), доступных клиентам (кеш)
  2. Raw - коллекция предметов Entity, которая должна быть утверждена (до 10% уникальных идентификаторов текущей коллекции)

Операции, которые я собираюсь выполнить против этих коллекций:

  1. Получить все сущности из текущей коллекции: GetCurrent - самая критическая задача
  2. Изменить коллекцию Raw:

    2.1) добавить новую сущность в Raw (можно изменить соответствующий счетчик / состояние в текущей коллекции): AddRaw

    2.2) обновить существующую сущность в Raw (если такой идентификатор уже доступен): UpdateRaw

  3. Изменить текущую коллекцию

    3.1) все изменения из коллекции Raw применяются к текущему (если еще не сделано): SyncCurrent

    3.2) возврат необработанных объектов сбора (инкрементное изменение)

    3.3) очистка необработанных объектов сбора (сбор сбрасывается)

Подход:

  1. Определите коллекции типа Set (чтобы получить список элементов, связанных с коллекцией): SMEMBERS

  2. Создать дополнительные коллекции Current:Ids, Raw:Ids, которые будут содержать только идентификаторы элементов из коллекций - чтобы определить, находится ли элемент в исходной коллекции:SISMEMBER

  3. Добавить новый товар в набор (ы): SADD

  4. Изменить элемент внутри набора (-ов): Получить (SMEMBERS: SSCAN, используя Id в качестве элемента маски или Итерировать по элементам (SMEMBERS), получить Entity с ID), RemoveOldFromSet: SREM, AddUpdated: SADD

Проблемы, проблемы (выявленные во время модульных тестов): (кажется, что все обнаруженные проблемы связаны с подключением к самому серверу Redis, а не с функциональностью клиента StackExchange.redis)

  1. Новый клиент StackExchange иногда генерирует исключение timeOut на SMEMBERS (500 предметов в текущей коллекции)

  2. Транзакция StackExchange выдает исключение timeOut при попытке вставить элементы (более 750 записей) в наборы тока и тока: для идентификаторов, current connectionTimeOut и SyncTimeOutrs установлено значение 5000 миллисекунд (5 секунд)

После запуска некоторых тестов (с несколькими сотнями элементов внутри наборов, я думаю, что выбранный подход изначально был неправильным, и его нужно изменить - используя Microsoft Cache.) У кого-то еще были подобные сомнения или можно сказать из собственного опыта, что подобные задачи должны не будет реализован так, как я только что описал?

Заранее спасибо.

0 ответов

Другие вопросы по тегам