这取决于很多因素,当您提到缓存时,您是指 Asp.Net 提供的标准缓存吗?
始终拥有最新信息是否绝对重要,或者如果有两个请求被分配,那么在发出请求时是否可以将它们分配给两个最不忙的用户?
您确实可以使用缓存来存储此信息,但这通常假设您只会使用一台服务器,您是否可能会使用集群或负载平衡来处理高负载?
我能给你的最好建议是构建一个设计良好的应用程序,使用丰富的域模型来表示每个用户和队列的负载、松散耦合的数据访问以及大量的自动化单元和系统测试。通过这种方式,您可以构建一个工作应用程序,让系统快速启动并运行,而不必担心优化,并尽快开始性能测试\分析。
如果\当您遇到性能问题时,您可以通过分析\跟踪来识别瓶颈,并酌情添加优化,这可能是缓存或优化的查询\视图或事物的组合。
如果您尝试再次猜测瓶颈在哪里并消除它们,您可能会猜错并损坏系统的设计。一个设计良好的系统可以在您需要时进行优化。
我最初设想的方式是一个关系数据库(可能使用视图或存储过程来快速获取工作负载摘要信息),在它和域模型之间有一个数据映射层(它可以使用缓存、延迟加载和身份映射到如果需要,提供效率)。域模型将主要代表工作负载。
我希望这会有用户、工作项、工作队列和分配策略类。其中大部分可以保存在内存中或在请求之间本地存储,每个请求都可以由一个更新模型的事件来表示。
例如
,用户完成工作项
站点引发域事件以通知域模型更改
域模型接收事件并更新用户的工作负载
然后,工作分配将是要求域模型在需要时分配工作(它将通过找到分配最少的用户的策略来完成)。这可能发生在单独的工作请求和事件之外的后台,以便在用户下次请求工作时通知他们。