C# 社交网络的内存缓存

C# 社交网络的内存缓存,c#,asp.net-mvc,mongodb,asp.net-core,redis,C#,Asp.net Mvc,Mongodb,Asp.net Core,Redis,各位 我正在从头开始创建一个社交网络,它是开源的,你可以找到代码 您可以在生产环境中看到它 它托管在Azure(应用服务),我使用AspNet Core Mvc作为基础,MongoDb Atlas作为持久性 我的问题是,我几乎需要整个应用程序中的用户提供一些信息,例如用户全名。因此,始终从数据库获取这些数据会占用大量资源,并降低整个解决方案的速度 例如: UserContentComment文档保存用户ID(Guid),但在呈现注释时,必须显示用户当前的全名,最近的配置文件更改必须反映整个平台

各位

我正在从头开始创建一个社交网络,它是开源的,你可以找到代码

您可以在生产环境中看到它

它托管在Azure(应用服务),我使用AspNet Core Mvc作为基础,MongoDb Atlas作为持久性

我的问题是,我几乎需要整个应用程序中的用户提供一些信息,例如用户全名。因此,始终从数据库获取这些数据会占用大量资源,并降低整个解决方案的速度

例如:

UserContentComment文档保存用户ID(Guid),但在呈现注释时,必须显示用户当前的全名,最近的配置文件更改必须反映整个平台

我曾考虑过使用内存缓存解决此问题,Microsoft推荐两种选择:

  • 伊梅莫里奇
  • 分布式缓存(SQL或Redis)
嗯,我真的不想选择分布式缓存解决方案,因为缺乏资金来支付在云上运行整个系统的成本。所以我考虑使用IMemoryCache

这里的问题是它是一个键/值存储,我现在只需要存储全名,但我担心我可能需要存储的其他东西,如位置、年龄等

此处的键格式如下所示:

{ Key:"7df21e7a-5dba-4635-bc39-08d7493f75dc_fullname", Value: "John Doe"}
{ Key:"7df21e7a-5dba-4635-bc39-08d7493f75dc_age", Value: "25"}
{ Key:"7df21e7a-5dba-4635-bc39-08d7493f75dc_location", Value: "Atlantis"}
或者我可以存储整个对象

{ Key:"7df21e7a-5dba-4635-bc39-08d7493f75dc", Value: johnprofile}
以这种方式存储此类信息是一种良好的做法吗

你们有什么改进的建议吗


谢谢大家的帮助

如果您只想缓存登录用户上的数据,请使用会话否则,如果您需要能够提取任何用户的全名,可以使用IMemoryCache缓存用户上的数据,但我会坚持使用注入接口,以便在以后需要时用另一个实现(如redis)替换它。