什么对象缓存?

时间:2011-05-22 14:54:24

标签: c# caching memcached

最好是(1)缓存表中的记录,或(2)完整对象图,或(3)根据用例的多个部分对象图?

让我澄清一下: 假设我有一个带工作流程的订单系统。它包含以下对象:Order,OrderLine,Items,Customer,W​​orkplan,Phase,Milestone,Activities等。

(1)我可以将Order表中的所有记录放入缓存中,将OrderLines表中的所有记录放入缓存中,将Items表中的所有记录放入缓存中等可能是一个可怕的想法,因为你无法查询缓存非常好。

(2)我可以将Order对象(包括OrderLines,OrderItems,Customer,W​​orkplan,Phases,Milestones等)放入缓存中。我不喜欢这个,因为我必须更新缓存的Order对象,如果它的Orderlines,Orderitems,Items,Customer,PHases,Milestones等中的某些东西发生了变化。另一件事是我不知道缓存对象有多大订单与10或15个其他对象有关系,这些对象都被加载到缓存的订单中。

(3)我可以在Orderdetails的一个部分'拆分'对象,以及wokrflow的一部分。这样我就有了一个包含所有相关订单详细信息的缓存订单对象。我有另一个Cached Order对象,包含所有相关的工作流程详细信息。

你们对于如何缓存这些东西有什么建议吗?

(我希望它很清楚,否则请告诉我)

1 个答案:

答案 0 :(得分:0)

您需要在查看次数最多的信息和最有效的信息之间找到平衡点。

例如,订单标题可能会在每个页面上访问,例如购物篮视图?在这种情况下缓存它,因为它会受到很多打击。但另一方面,里程碑,观看的频率是多少?如果您只是每次会话可能会查看一次,那么它就不太可能需要缓存,因为您没有获得真正的好处。

如果你要缓存整个对象模型,那么你将不断用我想象的数据更新缓存,没有真正的好处,以及为会话存储它的开销。