缓存对象集合的最佳方法.一起还是作为单独的项目?

Vyr*_*tek 6 c# caching azure multi-tenant

说我有一个用户集合.每个用户都有User_ID,用户名Tenant_ID.

有时我需要所有用户使用特定的Tenant_ID.
有时我需要一个基于User_ID的特定用户".
有时我需要一个基于用户名的用户.

我总是可以使用Tenant_ID作为查找的一部分.

为此数据实现缓存层的理想方法是什么?
自从我处理多租户系统以来,我应该考虑哪些因素?
管理所有可能的缓存密钥的最佳方法是什么?

选项#1:将所有用户存储在"Tenant_1_Users"的单个密钥下

这个问题是我将通过网络传输大量不需要的数据.如果我只需要找到一个特定的用户,那么我需要在检索整个集合后使用LINQ或其他东西在代码中进行查找.

选项#2:在"TenantID_1_UserID_5"和"TenantID_1_Username_Jason"等不同键下复制相同的User对象.

这里的问题是管理用户对象的所有各种键和位置.特别是如果我需要刷新特定用户,因为它已在数据库中更新.我现在需要知道它可以存储的所有可能的地方.也使用更多内存,因为相同的用户可以在不同的键下.

相关:AppFabric Cache'Design' - 缓存单个项目或集合?
问题是Azure AppFabric缓存不支持区域,标记或通知.

Cod*_*ike 4

就其价值而言,我倾向于不想在多个键下缓存同一个对象,因为如果您稍后需要更新或删除该记录,则必须记住更新/删除它可能具有的所有可能的键用过的。