Скажем, у меня есть коллекция пользователей. У каждого пользователя есть User_ID , Имя пользователя и Tenant_ID .
Иногда мне нужны все пользователи для определенного Tenant_ID .
Иногда мне нужен конкретный пользователь на основе User_ID".
Иногда мне нужен пользователь на основе Имя пользователя .
У меня всегда будет Tenant_ID, доступный для использования в качестве части поиска.
Каков идеальный способ реализации слоя кэша для этих данных?
Какие соображения мне следует учитывать, поскольку я имею дело с мультитенантной системой?
Каков наилучший способ управления всеми возможными ключами кэша?
Опция № 1: Хранить всех пользователей вместе под одной клавишей "Tenant_1_Users"
Проблема в том, что я буду передавать много нежелательных данных по проводам. Если мне просто нужно найти конкретного пользователя, то мне нужно выполнить поиск в коде с использованием LINQ или чего-то еще после извлечения целых коллекций.
Опция # 2: Дублировать один и тот же объект User под разными ключами, такими как "TenantID_1_UserID_5" и "TenantID_1_Username_Jason".
Проблема здесь заключается в управлении всеми различными ключами и расположением объектов пользователя. Особенно, если мне нужно очистить конкретного пользователя, потому что он был обновлен в базе данных. Теперь мне нужно знать все возможные места, где он может храниться. Также использует больше памяти, поскольку один и тот же пользователь может находиться под разными клавишами.
Похожие: AppFabric Cache 'Design' - кэширование отдельных элементов или коллекций?
Проблема заключается в том, что Azure AppFabric Caching не поддерживает регионы, теги или уведомления.