我正在使用ASP.NET / C#中的Web应用程序,它需要可扩展以处理高用户负载(可能在Web场中运行)。由于它将迎合大量用户,大约100万以上,但在线用户数量将在30K-50K左右。我计划使用缓存(基于提供程序),并且想知道:
为所有用户缓存性能是一个好主意吗?我打算缓存所有其他通用数据,比如设置等,但是如何有效地将所有用户缓存在内存中?如果用户更改了他/她的个人资料,我将仅重新加载缓存中的特定用户(拥有所有用户的集合)。有关这种方法的任何建议吗?
使用上述用户缓存时,是否需要担心锁定?编辑配置文件只有一个是用户自己,这将是一个原子操作,尽管在不同的线程中将有多个读取操作。因此,在从缓存中获取用户或更新特定用户时,我应该使用锁吗?
由于
阿西
答案 0 :(得分:6)
将任何内容放在仅对单个用户有用的全局缓存中通常是一个坏主意和性能杀手。优化您的数据库查询,您将会处于更好的状态。
作为一般经验法则,您只应将缓存中的内容保留在从数据库获取的昂贵内容中,并且多个用户希望一次查看该信息。比如前100名产品或其他东西的清单。从数据库中获取相对便宜且只对单个人有用的少量数据应该保持原样。
缓存极大地增加了复杂性,在Web场中更是如此。除非你绝对必须,否则不要引入不必要的复杂性。等到你遇到实际性能问题之后再尝试解决它。
答案 1 :(得分:0)
缓存用户可能是个好主意。但这取决于您要为每个用户缓存多少数据,以及从存储的任何位置检索该数据的成本。
对于锁定 - 其他任何人都可以编辑用户的个人资料(如管理员)吗?这会是一个常见的事吗?如果是这样,您可能想要进行一些锁定。否则,如果只有用户可以编辑自己的东西,我不会打扰。