Управляйте 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 с двумя коллекциями:
- Current - коллекция элементов Entity (до 5000), доступных клиентам (кеш)
- Raw - коллекция предметов Entity, которая должна быть утверждена (до 10% уникальных идентификаторов текущей коллекции)
Операции, которые я собираюсь выполнить против этих коллекций:
- Получить все сущности из текущей коллекции: GetCurrent - самая критическая задача
Изменить коллекцию Raw:
2.1) добавить новую сущность в Raw (можно изменить соответствующий счетчик / состояние в текущей коллекции): AddRaw
2.2) обновить существующую сущность в Raw (если такой идентификатор уже доступен): UpdateRaw
Изменить текущую коллекцию
3.1) все изменения из коллекции Raw применяются к текущему (если еще не сделано): SyncCurrent
3.2) возврат необработанных объектов сбора (инкрементное изменение)
3.3) очистка необработанных объектов сбора (сбор сбрасывается)
Подход:
Определите коллекции типа Set (чтобы получить список элементов, связанных с коллекцией): SMEMBERS
Создать дополнительные коллекции Current:Ids, Raw:Ids, которые будут содержать только идентификаторы элементов из коллекций - чтобы определить, находится ли элемент в исходной коллекции:SISMEMBER
Добавить новый товар в набор (ы): SADD
Изменить элемент внутри набора (-ов): Получить (SMEMBERS: SSCAN, используя Id в качестве элемента маски или Итерировать по элементам (SMEMBERS), получить Entity с ID), RemoveOldFromSet: SREM, AddUpdated: SADD
Проблемы, проблемы (выявленные во время модульных тестов): (кажется, что все обнаруженные проблемы связаны с подключением к самому серверу Redis, а не с функциональностью клиента StackExchange.redis)
Новый клиент StackExchange иногда генерирует исключение timeOut на SMEMBERS (500 предметов в текущей коллекции)
Транзакция StackExchange выдает исключение timeOut при попытке вставить элементы (более 750 записей) в наборы тока и тока: для идентификаторов, current connectionTimeOut и SyncTimeOutrs установлено значение 5000 миллисекунд (5 секунд)
После запуска некоторых тестов (с несколькими сотнями элементов внутри наборов, я думаю, что выбранный подход изначально был неправильным, и его нужно изменить - используя Microsoft Cache.) У кого-то еще были подобные сомнения или можно сказать из собственного опыта, что подобные задачи должны не будет реализован так, как я только что описал?
Заранее спасибо.